From 464df1d5e5ab1322e2dd0a7796939fff1aeefa9a Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 17:49:25 +0200 Subject: Adding upstream version 1.47.0. Signed-off-by: Daniel Baumann --- e2fsck/extend.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 e2fsck/extend.c (limited to 'e2fsck/extend.c') diff --git a/e2fsck/extend.c b/e2fsck/extend.c new file mode 100644 index 0000000..9d17e44 --- /dev/null +++ b/e2fsck/extend.c @@ -0,0 +1,83 @@ +/* + * 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); +} -- cgit v1.2.3