diff options
Diffstat (limited to 'daemon/ext2.c')
-rw-r--r-- | daemon/ext2.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/daemon/ext2.c b/daemon/ext2.c index 3758f4ee..3a075e56 100644 --- a/daemon/ext2.c +++ b/daemon/ext2.c @@ -20,6 +20,7 @@ #include <stdio.h> #include <stdlib.h> +#include <inttypes.h> #include <string.h> #include <unistd.h> @@ -301,6 +302,41 @@ do_resize2fs (const char *device) } int +do_resize2fs_size (const char *device, int64_t size) +{ + char *err; + int r; + + char prog[] = "resize2fs"; + if (e2prog (prog) == -1) + return -1; + + /* resize2fs itself may impose additional limits. Since we are + * going to use the 'K' suffix however we can only work with whole + * kilobytes. + */ + if (size & 1023) { + reply_with_error ("%" PRIi64 ": size must be a round number of kilobytes", + size); + return -1; + } + size /= 1024; + + char buf[32]; + snprintf (buf, sizeof buf, "%" PRIi64 "K", size); + + r = command (NULL, &err, prog, device, buf, NULL); + if (r == -1) { + reply_with_error ("%s", err); + free (err); + return -1; + } + + free (err); + return 0; +} + +int do_e2fsck_f (const char *device) { char *err; |