#include "file_common.h"
static void usage(char *progname);
static void
usage(char *progname)
{
(void) fprintf(stderr,
"usage: %s [-l filesize] [-s start-offset]"
"[-n section-len] filename\n", progname);
exit(1);
}
int
main(int argc, char *argv[])
{
char *filename, *buf;
size_t filesize;
off_t start_off, off_len;
int fd, ch;
struct flock fl;
while ((ch = getopt(argc, argv, "l:s:n:")) != EOF) {
switch (ch) {
case 'l':
filesize = atoll(optarg);
break;
case 's':
start_off = atoll(optarg);
break;
case 'n':
off_len = atoll(optarg);
break;
default:
usage(argv[0]);
break;
}
}
if (optind == argc - 1)
filename = argv[optind];
else
usage(argv[0]);
buf = (char *)malloc(filesize);
if ((fd = open(filename, O_RDWR|O_CREAT|O_TRUNC)) < 0) {
perror("open");
return (1);
}
if (write(fd, buf, filesize) < filesize) {
perror("write");
return (1);
}
#if UNSUPPORTED
fl.l_whence = SEEK_SET;
fl.l_start = start_off;
fl.l_len = off_len;
if (fcntl(fd, F_FREESP, &fl) != 0) {
perror("fcntl");
return (1);
}
#else
fprintf(stderr, "fcntl: F_FREESP not supported\n");
return (1);
#endif
free(buf);
return (0);
}