/* * 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 "config.h" #include #include #include #include #include #include #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; errcode_t retval; 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); } retval = ext2fs_get_memzero(blocksize, &block); if (retval) { fprintf(stderr, _("Couldn't allocate block buffer (size=%d)\n"), blocksize); exit(1); } 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); } ext2fs_free_mem(&block); return(0); }