diff options
-rw-r--r-- | daemon/file.c | 18 | ||||
-rw-r--r-- | src/MAX_PROC_NR | 2 | ||||
-rwxr-xr-x | src/generator.ml | 12 |
3 files changed, 31 insertions, 1 deletions
diff --git a/daemon/file.c b/daemon/file.c index 0b50eebd..839713f6 100644 --- a/daemon/file.c +++ b/daemon/file.c @@ -520,3 +520,21 @@ do_zfile (const char *method, const char *path) return strdup (line); } + +int64_t +do_filesize (const char *path) +{ + int r; + struct stat buf; + + CHROOT_IN; + r = stat (path, &buf); /* follow symlinks */ + CHROOT_OUT; + + if (r == -1) { + reply_with_perror ("filesize: %s", path); + return -1; + } + + return buf.st_size; +} diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR index 0ddd619c..dc6f4a87 100644 --- a/src/MAX_PROC_NR +++ b/src/MAX_PROC_NR @@ -1 +1 @@ -217 +218 diff --git a/src/generator.ml b/src/generator.ml index 4bf4b0f4..e55b2b5a 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -4188,6 +4188,18 @@ If the destination is a device, it must be as large or larger than the source file or device, otherwise the copy will fail. This command cannot do partial copies."); + ("filesize", (RInt64 "size", [Pathname "file"]), 218, [], + [InitBasicFS, Always, TestOutputInt ( + [["write_file"; "/file"; "hello, world"; "0"]; + ["filesize"; "/file"]], 12)], + "return the size of the file in bytes", + "\ +This command returns the size of C<file> in bytes. + +To get other stats about a file, use C<guestfs_stat>, C<guestfs_lstat>, +C<guestfs_is_dir>, C<guestfs_is_file> etc. +To get the size of block devices, use C<guestfs_blockdev_getsize64>."); + ] let all_functions = non_daemon_functions @ daemon_functions |