- size_t filelen = statbuf.st_size;
- sprintf(buf, "%zd\n", filelen);
+ size_t datalen = statbuf.st_size;
+ if (start > 0) {
+ if (start >= datalen) {
+ datalen = 0;
+ } else {
+ lseek(file, start, SEEK_SET);
+ datalen -= start;
+ }
+ }
+ if (len > 0 && len < datalen) {
+ datalen = len;
+ }
+
+ sprintf(buf, "%zd\n", datalen);