Initial commit.
[hondza-y36pr2.git] / createsparse / createsparse.c
blob8a195dcba0d22aeb22a6cd4484fcdda45cd7c258
1 /******************************************************************************
2 * createsparse.c
3 * creates arbitrary sized sparse files
4 *****************************************************************************/
6 #define _FILE_OFFSET_BITS 64
7 #define _GNU_SOURCE
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <string.h>
12 #include <unistd.h>
14 #include <errno.h>
16 static unsigned long long get_special_number(char *in)
18 unsigned long long ret;
19 char *unit;
21 ret = strtoull(in, &unit, 10);
22 if(*unit == 'k') { ret *= 1024; }
23 else if(*unit == 'K') { ret *= 1000; }
24 else if(*unit == 'm') { ret *= 1024*1024; }
25 else if(*unit == 'M') { ret *= 1000*1000; }
26 else if(*unit == 'g') { ret *= 1024*1024*1024; }
27 else if(*unit == 'G') { ret *= 1000*1000*1000; }
29 return ret;
30 } /* get_special_number() */
33 int main(int argc, char ** argv)
35 size_t size;
36 FILE *f;
37 int err, i, ret=0;
39 if(argc < 3)
41 fprintf(stderr, "Usage: createsparse <size[kKmMgG]> <filename> [filenames ...]\n\n");
42 exit(1);
45 size = get_special_number(argv[1]);
47 for(i=2; i < argc; i++)
49 f = fopen(argv[i], "w+");
50 if(!f)
52 ret = 1;
53 fprintf(stderr, "%s: fopen() failed: %s\n", argv[i], strerror(errno));
54 continue;
56 err = fseek(f, size-1, SEEK_SET);
57 if(-1 == err)
59 ret = 1;
60 fprintf(stderr, "%s: fseek() failed: %s\n", argv[i], strerror(errno));
61 fclose(f);
62 continue;
64 err = putc(0, f);
65 if(EOF == err)
67 ret = 1;
68 fprintf(stderr, "%s: putc() failed: %s\n", argv[i], strerror(errno));
69 fclose(f);
70 continue;
72 } /* for i */
74 return ret;
75 } /* main() */