OLD | NEW |
| (Empty) |
1 /* | |
2 ** Extract a range of bytes from a file. | |
3 ** | |
4 ** Usage: | |
5 ** | |
6 ** extract FILENAME OFFSET AMOUNT | |
7 ** | |
8 ** The bytes are written to standard output. | |
9 */ | |
10 #include <stdio.h> | |
11 #include <stdlib.h> | |
12 | |
13 int main(int argc, char **argv){ | |
14 FILE *f; | |
15 char *zBuf; | |
16 int ofst; | |
17 int n; | |
18 size_t got; | |
19 | |
20 if( argc!=4 ){ | |
21 fprintf(stderr, "Usage: %s FILENAME OFFSET AMOUNT\n", *argv); | |
22 return 1; | |
23 } | |
24 f = fopen(argv[1], "rb"); | |
25 if( f==0 ){ | |
26 fprintf(stderr, "cannot open \"%s\"\n", argv[1]); | |
27 return 1; | |
28 } | |
29 ofst = atoi(argv[2]); | |
30 n = atoi(argv[3]); | |
31 zBuf = malloc( n ); | |
32 if( zBuf==0 ){ | |
33 fprintf(stderr, "out of memory\n"); | |
34 return 1; | |
35 } | |
36 fseek(f, ofst, SEEK_SET); | |
37 got = fread(zBuf, 1, n, f); | |
38 fclose(f); | |
39 if( got<n ){ | |
40 fprintf(stderr, "got only %d of %d bytes\n", got, n); | |
41 return 1; | |
42 }else{ | |
43 fwrite(zBuf, 1, n, stdout); | |
44 } | |
45 return 0; | |
46 } | |
OLD | NEW |