diff --git a/daemon/file.c b/daemon/file.c index 0b50eebd7..839713f66 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 0ddd619ce..dc6f4a877 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 4bf4b0f40..e55b2b5a9 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 in bytes. + +To get other stats about a file, use C, C, +C, C etc. +To get the size of block devices, use C."); + ] let all_functions = non_daemon_functions @ daemon_functions