summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--daemon/file.c18
-rw-r--r--src/MAX_PROC_NR2
-rwxr-xr-xsrc/generator.ml12
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