X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=fish%2Fcmds.c;h=c197ecea86ded8310ea91f2a79952cb332866d78;hp=60aee8c16929bcb591e4e280fa2b6bf40cf24154;hb=1765330e07a48dc6f7bdef7007f69ebe606fa731;hpb=6bcbe54b5785cb8c911ccf4b724ae6abfdf53ce4 diff --git a/fish/cmds.c b/fish/cmds.c index 60aee8c..c197ece 100644 --- a/fish/cmds.c +++ b/fish/cmds.c @@ -46,6 +46,16 @@ void list_commands (void) printf ("%-20s %s\n", "aug-rm", "remove an Augeas path"); printf ("%-20s %s\n", "aug-save", "write all pending Augeas changes to disk"); printf ("%-20s %s\n", "aug-set", "set Augeas path to value"); + printf ("%-20s %s\n", "blockdev-flushbufs", "flush device buffers"); + printf ("%-20s %s\n", "blockdev-getbsz", "get blocksize of block device"); + printf ("%-20s %s\n", "blockdev-getro", "is block device set to read-only"); + printf ("%-20s %s\n", "blockdev-getsize64", "get total size of device in bytes"); + printf ("%-20s %s\n", "blockdev-getss", "get sectorsize of block device"); + printf ("%-20s %s\n", "blockdev-getsz", "get total size of device in 512-byte sectors"); + printf ("%-20s %s\n", "blockdev-rereadpt", "reread partition table"); + printf ("%-20s %s\n", "blockdev-setbsz", "set blocksize of block device"); + printf ("%-20s %s\n", "blockdev-setro", "set block device to read-only"); + printf ("%-20s %s\n", "blockdev-setrw", "set block device to read-write"); printf ("%-20s %s\n", "cat", "list the contents of a file"); printf ("%-20s %s\n", "chmod", "change file mode"); printf ("%-20s %s\n", "chown", "change file owner and group"); @@ -90,6 +100,7 @@ void list_commands (void) 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", "tune2fs-l", "get ext2/ext3 superblock details"); printf ("%-20s %s\n", "umount", "unmount a filesystem"); printf ("%-20s %s\n", "umount-all", "unmount all filesystems"); printf ("%-20s %s\n", "vgcreate", "create an LVM volume group"); @@ -144,7 +155,7 @@ void display_command (const char *cmd) pod2text ("touch - update file timestamps or create a new file", " touch \n\nTouch acts like the L command. It can be used to\nupdate the timestamps on a file, or, if the file does not exist,\nto create a new zero-length file."); else if (strcasecmp (cmd, "cat") == 0) - pod2text ("cat - list the contents of a file", " cat \n\nReturn the contents of the file named C.\n\nNote that this function cannot correctly handle binary files\n(specifically, files containing C<\\0> character which is treated\nas end of string). For those you need to use the C\nfunction which has a more complex interface.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB. To transfer large files you should use\nFTP."); + pod2text ("cat - list the contents of a file", " cat \n\nReturn the contents of the file named C.\n\nNote that this function cannot correctly handle binary files\n(specifically, files containing C<\\0> character which is treated\nas end of string). For those you need to use the C\nfunction which has a more complex interface.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB. To transfer large files you should use\nFTP."); else if (strcasecmp (cmd, "ll") == 0) pod2text ("ll - list the files in a directory (long format)", " ll \n\nList the files in C (relative to the root directory,\nthere is no cwd) in the format of 'ls -la'.\n\nThis command is mostly useful for interactive sessions. It\nis I intended that you try to parse the output string."); @@ -296,6 +307,39 @@ void display_command (const char *cmd) 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 + if (strcasecmp (cmd, "tune2fs_l") == 0 || strcasecmp (cmd, "tune2fs-l") == 0) + pod2text ("tune2fs-l - get ext2/ext3 superblock details", " tune2fs-l \n\nThis returns the contents of the ext2 or ext3 filesystem superblock\non C.\n\nIt is the same as running C. See L\nmanpage for more details. The list of fields returned isn't\nclearly defined, and depends on both the version of C\nthat libguestfs was built against, and the filesystem itself."); + else + if (strcasecmp (cmd, "blockdev_setro") == 0 || strcasecmp (cmd, "blockdev-setro") == 0) + pod2text ("blockdev-setro - set block device to read-only", " blockdev-setro \n\nSets the block device named C to read-only.\n\nThis uses the L command."); + else + if (strcasecmp (cmd, "blockdev_setrw") == 0 || strcasecmp (cmd, "blockdev-setrw") == 0) + pod2text ("blockdev-setrw - set block device to read-write", " blockdev-setrw \n\nSets the block device named C to read-write.\n\nThis uses the L command."); + else + if (strcasecmp (cmd, "blockdev_getro") == 0 || strcasecmp (cmd, "blockdev-getro") == 0) + pod2text ("blockdev-getro - is block device set to read-only", " blockdev-getro \n\nReturns a boolean indicating if the block device is read-only\n(true if read-only, false if not).\n\nThis uses the L command."); + else + if (strcasecmp (cmd, "blockdev_getss") == 0 || strcasecmp (cmd, "blockdev-getss") == 0) + pod2text ("blockdev-getss - get sectorsize of block device", " blockdev-getss \n\nThis returns the size of sectors on a block device.\nUsually 512, but can be larger for modern devices.\n\n(Note, this is not the size in sectors, use C\nfor that).\n\nThis uses the L command."); + else + if (strcasecmp (cmd, "blockdev_getbsz") == 0 || strcasecmp (cmd, "blockdev-getbsz") == 0) + pod2text ("blockdev-getbsz - get blocksize of block device", " blockdev-getbsz \n\nThis returns the block size of a device.\n\n(Note this is different from both I and\nI).\n\nThis uses the L command."); + else + if (strcasecmp (cmd, "blockdev_setbsz") == 0 || strcasecmp (cmd, "blockdev-setbsz") == 0) + pod2text ("blockdev-setbsz - set blocksize of block device", " blockdev-setbsz \n\nThis sets the block size of a device.\n\n(Note this is different from both I and\nI).\n\nThis uses the L command."); + else + if (strcasecmp (cmd, "blockdev_getsz") == 0 || strcasecmp (cmd, "blockdev-getsz") == 0) + pod2text ("blockdev-getsz - get total size of device in 512-byte sectors", " blockdev-getsz \n\nThis returns the size of the device in units of 512-byte sectors\n(even if the sectorsize isn't 512 bytes ... weird).\n\nSee also C for the real sector size of\nthe device, and C for the more\nuseful I.\n\nThis uses the L command."); + else + if (strcasecmp (cmd, "blockdev_getsize64") == 0 || strcasecmp (cmd, "blockdev-getsize64") == 0) + pod2text ("blockdev-getsize64 - get total size of device in bytes", " blockdev-getsize64 \n\nThis returns the size of the device in bytes.\n\nSee also C.\n\nThis uses the L command."); + else + if (strcasecmp (cmd, "blockdev_flushbufs") == 0 || strcasecmp (cmd, "blockdev-flushbufs") == 0) + pod2text ("blockdev-flushbufs - flush device buffers", " blockdev-flushbufs \n\nThis tells the kernel to flush internal buffers associated\nwith C.\n\nThis uses the L command."); + else + if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0) + pod2text ("blockdev-rereadpt - reread partition table", " blockdev-rereadpt \n\nReread the partition table on C.\n\nThis uses the L command."); + else display_builtin_command (cmd); } @@ -857,7 +901,7 @@ static int run_aug_defvar (const char *cmd, int argc, char *argv[]) expr = strcmp (argv[1], "") != 0 ? argv[1] : NULL; r = guestfs_aug_defvar (g, name, expr); if (r == -1) return -1; - if (r) printf ("%d\n", r); + printf ("%d\n", r); return 0; } @@ -946,7 +990,7 @@ static int run_aug_rm (const char *cmd, int argc, char *argv[]) path = argv[0]; r = guestfs_aug_rm (g, path); if (r == -1) return -1; - if (r) printf ("%d\n", r); + printf ("%d\n", r); return 0; } @@ -1435,6 +1479,175 @@ static int run_statvfs (const char *cmd, int argc, char *argv[]) return 0; } +static int run_tune2fs_l (const char *cmd, int argc, char *argv[]) +{ + char **r; + const char *device; + 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; + } + device = argv[0]; + r = guestfs_tune2fs_l (g, device); + if (r == NULL) return -1; + print_table (r); + free_strings (r); + return 0; +} + +static int run_blockdev_setro (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *device; + 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; + } + device = argv[0]; + r = guestfs_blockdev_setro (g, device); + return r; +} + +static int run_blockdev_setrw (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *device; + 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; + } + device = argv[0]; + r = guestfs_blockdev_setrw (g, device); + return r; +} + +static int run_blockdev_getro (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *device; + 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; + } + device = argv[0]; + r = guestfs_blockdev_getro (g, device); + if (r == -1) return -1; + if (r) printf ("true\n"); else printf ("false\n"); + return 0; +} + +static int run_blockdev_getss (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *device; + 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; + } + device = argv[0]; + r = guestfs_blockdev_getss (g, device); + if (r == -1) return -1; + printf ("%d\n", r); + return 0; +} + +static int run_blockdev_getbsz (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *device; + 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; + } + device = argv[0]; + r = guestfs_blockdev_getbsz (g, device); + if (r == -1) return -1; + printf ("%d\n", r); + return 0; +} + +static int run_blockdev_setbsz (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *device; + int blocksize; + if (argc != 2) { + fprintf (stderr, "%s should have 2 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + device = argv[0]; + blocksize = atoi (argv[1]); + r = guestfs_blockdev_setbsz (g, device, blocksize); + return r; +} + +static int run_blockdev_getsz (const char *cmd, int argc, char *argv[]) +{ + int64_t r; + const char *device; + 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; + } + device = argv[0]; + r = guestfs_blockdev_getsz (g, device); + if (r == -1) return -1; + printf ("%" PRIi64 "\n", r); + return 0; +} + +static int run_blockdev_getsize64 (const char *cmd, int argc, char *argv[]) +{ + int64_t r; + const char *device; + 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; + } + device = argv[0]; + r = guestfs_blockdev_getsize64 (g, device); + if (r == -1) return -1; + printf ("%" PRIi64 "\n", r); + return 0; +} + +static int run_blockdev_flushbufs (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *device; + 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; + } + device = argv[0]; + r = guestfs_blockdev_flushbufs (g, device); + return r; +} + +static int run_blockdev_rereadpt (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *device; + 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; + } + device = argv[0]; + r = guestfs_blockdev_rereadpt (g, device); + return r; +} + int run_action (const char *cmd, int argc, char *argv[]) { if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0) @@ -1632,6 +1845,39 @@ int run_action (const char *cmd, int argc, char *argv[]) if (strcasecmp (cmd, "statvfs") == 0) return run_statvfs (cmd, argc, argv); else + if (strcasecmp (cmd, "tune2fs_l") == 0 || strcasecmp (cmd, "tune2fs-l") == 0) + return run_tune2fs_l (cmd, argc, argv); + else + if (strcasecmp (cmd, "blockdev_setro") == 0 || strcasecmp (cmd, "blockdev-setro") == 0) + return run_blockdev_setro (cmd, argc, argv); + else + if (strcasecmp (cmd, "blockdev_setrw") == 0 || strcasecmp (cmd, "blockdev-setrw") == 0) + return run_blockdev_setrw (cmd, argc, argv); + else + if (strcasecmp (cmd, "blockdev_getro") == 0 || strcasecmp (cmd, "blockdev-getro") == 0) + return run_blockdev_getro (cmd, argc, argv); + else + if (strcasecmp (cmd, "blockdev_getss") == 0 || strcasecmp (cmd, "blockdev-getss") == 0) + return run_blockdev_getss (cmd, argc, argv); + else + if (strcasecmp (cmd, "blockdev_getbsz") == 0 || strcasecmp (cmd, "blockdev-getbsz") == 0) + return run_blockdev_getbsz (cmd, argc, argv); + else + if (strcasecmp (cmd, "blockdev_setbsz") == 0 || strcasecmp (cmd, "blockdev-setbsz") == 0) + return run_blockdev_setbsz (cmd, argc, argv); + else + if (strcasecmp (cmd, "blockdev_getsz") == 0 || strcasecmp (cmd, "blockdev-getsz") == 0) + return run_blockdev_getsz (cmd, argc, argv); + else + if (strcasecmp (cmd, "blockdev_getsize64") == 0 || strcasecmp (cmd, "blockdev-getsize64") == 0) + return run_blockdev_getsize64 (cmd, argc, argv); + else + if (strcasecmp (cmd, "blockdev_flushbufs") == 0 || strcasecmp (cmd, "blockdev-flushbufs") == 0) + return run_blockdev_flushbufs (cmd, argc, argv); + else + if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0) + return run_blockdev_rereadpt (cmd, argc, argv); + else { fprintf (stderr, "%s: unknown command\n", cmd); return -1;