X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=fish%2Fcmds.c;h=60aee8c16929bcb591e4e280fa2b6bf40cf24154;hp=2e536a50bc1dab7daadbc7cbd64ce870aaa45d03;hb=6bcbe54b5785cb8c911ccf4b724ae6abfdf53ce4;hpb=5365ebd501850ea10d9a5b28fc6480ea34dbe16d diff --git a/fish/cmds.c b/fish/cmds.c index 2e536a5..60aee8c 100644 --- a/fish/cmds.c +++ b/fish/cmds.c @@ -65,6 +65,7 @@ void list_commands (void) printf ("%-20s %s\n", "list-partitions", "list the partitions"); printf ("%-20s %s\n", "ll", "list the files in a directory (long format)"); printf ("%-20s %s\n", "ls", "list the files in a directory"); + printf ("%-20s %s\n", "lstat", "get file information for a symbolic link"); printf ("%-20s %s\n", "lvcreate", "create an LVM volume group"); printf ("%-20s %s\n", "lvm-remove-all", "remove all LVM LVs, VGs and PVs"); printf ("%-20s %s\n", "lvs", "list the LVM logical volumes (LVs)"); @@ -85,6 +86,8 @@ void list_commands (void) printf ("%-20s %s\n", "set-path", "set the search path"); printf ("%-20s %s\n", "set-verbose", "set verbose mode"); printf ("%-20s %s\n", "sfdisk", "create partitions on a block device"); + printf ("%-20s %s\n", "stat", "get file information"); + printf ("%-20s %s\n", "statvfs", "get file system statistics"); printf ("%-20s %s\n", "sync", "sync disks, writes are flushed through to the disk image"); printf ("%-20s %s\n", "touch", "update file timestamps or create a new file"); printf ("%-20s %s\n", "umount", "unmount a filesystem"); @@ -279,11 +282,20 @@ void display_command (const char *cmd) pod2text ("file - determine file type", " file \n\nThis call uses the standard L command to determine\nthe type or contents of the file. This also works on devices,\nfor example to find out whether a partition contains a filesystem.\n\nThe exact command which runs is C. Note in\nparticular that the filename is not prepended to the output\n(the C<-b> option)."); else if (strcasecmp (cmd, "command") == 0) - pod2text ("command - run a command from the guest filesystem", " command \n\nThis calls runs a command from the guest filesystem. The\nfilesystem must be mounted, and must contain a compatible\noperating system (ie. something Linux, with the same\nor compatible processor architecture).\n\nThe single parameter is an argv-style list of arguments.\nThe first element is the name of the program to run.\nSubsequent elements are parameters. The list must be\nnon-empty (ie. must contain a program name).\n\nThe C<$PATH> environment variable will contain at least\nC and C. If you require a program from\nanother location, you should provide the full path in the\nfirst parameter.\n\nShared libraries and data files required by the program\nmust be available on filesystems which are mounted in the\ncorrect places. It is the caller's responsibility to ensure\nall filesystems that are needed are mounted at the right\nlocations."); + pod2text ("command - run a command from the guest filesystem", " command \n\nThis call runs a command from the guest filesystem. The\nfilesystem must be mounted, and must contain a compatible\noperating system (ie. something Linux, with the same\nor compatible processor architecture).\n\nThe single parameter is an argv-style list of arguments.\nThe first element is the name of the program to run.\nSubsequent elements are parameters. The list must be\nnon-empty (ie. must contain a program name).\n\nThe C<$PATH> environment variable will contain at least\nC and C. If you require a program from\nanother location, you should provide the full path in the\nfirst parameter.\n\nShared libraries and data files required by the program\nmust be available on filesystems which are mounted in the\ncorrect places. It is the caller's responsibility to ensure\nall filesystems that are needed are mounted at the right\nlocations."); else if (strcasecmp (cmd, "command_lines") == 0 || strcasecmp (cmd, "command-lines") == 0) pod2text ("command-lines - run a command, returning lines", " command-lines \n\nThis is the same as C, but splits the\nresult into a list of lines."); else + if (strcasecmp (cmd, "stat") == 0) + pod2text ("stat - get file information", " stat \n\nReturns file information for the given C.\n\nThis is the same as the C system call."); + else + if (strcasecmp (cmd, "lstat") == 0) + pod2text ("lstat - get file information for a symbolic link", " lstat \n\nReturns file information for the given C.\n\nThis is the same as C except that if C\nis a symbolic link, then the link is stat-ed, not the file it\nrefers to.\n\nThis is the same as the C system call."); + else + if (strcasecmp (cmd, "statvfs") == 0) + pod2text ("statvfs - get file system statistics", " statvfs \n\nReturns file system statistics for any mounted file system.\nC should be a file or directory in the mounted file system\n(typically it is the mount point itself, but it doesn't need to be).\n\nThis is the same as the C system call."); + else display_builtin_command (cmd); } @@ -389,6 +401,38 @@ static void print_lv_list (struct guestfs_lvm_lv_list *lvs) print_lv (&lvs->val[i]); } +static void print_stat (struct guestfs_stat *stat) +{ + printf ("dev: %" PRIi64 "\n", stat->dev); + printf ("ino: %" PRIi64 "\n", stat->ino); + printf ("mode: %" PRIi64 "\n", stat->mode); + printf ("nlink: %" PRIi64 "\n", stat->nlink); + printf ("uid: %" PRIi64 "\n", stat->uid); + printf ("gid: %" PRIi64 "\n", stat->gid); + printf ("rdev: %" PRIi64 "\n", stat->rdev); + printf ("size: %" PRIi64 "\n", stat->size); + printf ("blksize: %" PRIi64 "\n", stat->blksize); + printf ("blocks: %" PRIi64 "\n", stat->blocks); + printf ("atime: %" PRIi64 "\n", stat->atime); + printf ("mtime: %" PRIi64 "\n", stat->mtime); + printf ("ctime: %" PRIi64 "\n", stat->ctime); +} + +static void print_statvfs (struct guestfs_statvfs *statvfs) +{ + printf ("bsize: %" PRIi64 "\n", statvfs->bsize); + printf ("frsize: %" PRIi64 "\n", statvfs->frsize); + printf ("blocks: %" PRIi64 "\n", statvfs->blocks); + printf ("bfree: %" PRIi64 "\n", statvfs->bfree); + printf ("bavail: %" PRIi64 "\n", statvfs->bavail); + printf ("files: %" PRIi64 "\n", statvfs->files); + printf ("ffree: %" PRIi64 "\n", statvfs->ffree); + printf ("favail: %" PRIi64 "\n", statvfs->favail); + printf ("fsid: %" PRIi64 "\n", statvfs->fsid); + printf ("flag: %" PRIi64 "\n", statvfs->flag); + printf ("namemax: %" PRIi64 "\n", statvfs->namemax); +} + static int run_launch (const char *cmd, int argc, char *argv[]) { int r; @@ -1340,6 +1384,57 @@ static int run_command_lines (const char *cmd, int argc, char *argv[]) return 0; } +static int run_stat (const char *cmd, int argc, char *argv[]) +{ + struct guestfs_stat *r; + const char *path; + if (argc != 1) { + fprintf (stderr, "%s should have 1 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + path = argv[0]; + r = guestfs_stat (g, path); + if (r == NULL) return -1; + print_stat (r); + free (r); + return 0; +} + +static int run_lstat (const char *cmd, int argc, char *argv[]) +{ + struct guestfs_stat *r; + const char *path; + if (argc != 1) { + fprintf (stderr, "%s should have 1 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + path = argv[0]; + r = guestfs_lstat (g, path); + if (r == NULL) return -1; + print_stat (r); + free (r); + return 0; +} + +static int run_statvfs (const char *cmd, int argc, char *argv[]) +{ + struct guestfs_statvfs *r; + const char *path; + if (argc != 1) { + fprintf (stderr, "%s should have 1 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + path = argv[0]; + r = guestfs_statvfs (g, path); + if (r == NULL) return -1; + print_statvfs (r); + free (r); + return 0; +} + int run_action (const char *cmd, int argc, char *argv[]) { if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0) @@ -1528,6 +1623,15 @@ int run_action (const char *cmd, int argc, char *argv[]) if (strcasecmp (cmd, "command_lines") == 0 || strcasecmp (cmd, "command-lines") == 0) return run_command_lines (cmd, argc, argv); else + if (strcasecmp (cmd, "stat") == 0) + return run_stat (cmd, argc, argv); + else + if (strcasecmp (cmd, "lstat") == 0) + return run_lstat (cmd, argc, argv); + else + if (strcasecmp (cmd, "statvfs") == 0) + return run_statvfs (cmd, argc, argv); + else { fprintf (stderr, "%s: unknown command\n", cmd); return -1;