/* * extend.c --- extend a file so that it has at least a specified * number of blocks. * * Copyright (C) 1993, 1994, 1995 Theodore Ts'o. * * This file may be redistributed under the terms of the GNU Public * License. */ #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <fcntl.h> #include "../misc/nls-enable.h" static void usage(char *progname) { fprintf(stderr, _("%s: %s filename nblocks blocksize\n"), progname, progname); exit(1); } int main(int argc, char **argv) { char *filename; int nblocks, blocksize; int fd; char *block; int ret; if (argc != 4) usage(argv[0]); filename = argv[1]; nblocks = strtoul(argv[2], 0, 0) - 1; blocksize = strtoul(argv[3], 0, 0); if (nblocks < 0) { fprintf(stderr, _("Illegal number of blocks!\n")); exit(1); } block = malloc(blocksize); if (block == 0) { fprintf(stderr, _("Couldn't allocate block buffer (size=%d)\n"), blocksize); exit(1); } memset(block, 0, blocksize); fd = open(filename, O_RDWR); if (fd < 0) { perror(filename); exit(1); } ret = lseek(fd, nblocks*blocksize, SEEK_SET); if (ret < 0) { perror("lseek"); exit(1); } ret = read(fd, block, blocksize); if (ret < 0) { perror("read"); exit(1); } ret = lseek(fd, nblocks*blocksize, SEEK_SET); if (ret < 0) { perror("lseek #2"); exit(1); } ret = write(fd, block, blocksize); if (ret < 0) { perror("read"); exit(1); } exit(0); }