diff options
author | Christopher Faylor <me@cgf.cx> | 2001-09-03 22:02:54 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2001-09-03 22:02:54 +0000 |
commit | bee722a5e728dac0e117166d42870103c00ffcbb (patch) | |
tree | 7b15b807fc1b3df17b35c6b005c3fd5bf9c56c8a /winsup | |
parent | 7170a41bc8a01f6415fd39e84928719490e8625d (diff) | |
download | newlib-bee722a5e728dac0e117166d42870103c00ffcbb.zip newlib-bee722a5e728dac0e117166d42870103c00ffcbb.tar.gz newlib-bee722a5e728dac0e117166d42870103c00ffcbb.tar.bz2 |
* mount.cc (longopts): Add mount-commands to options list.
(usage): Add mount-commands option.
(mount_commands): New function. Write commands to recreate current mounts.
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/utils/ChangeLog | 7 | ||||
-rw-r--r-- | winsup/utils/mount.cc | 76 |
2 files changed, 81 insertions, 2 deletions
diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog index caadb30..3fe1071 100644 --- a/winsup/utils/ChangeLog +++ b/winsup/utils/ChangeLog @@ -1,3 +1,10 @@ +2001-09-03 Michael A Chase <mchase@ix.netcom.com> + + * mount.cc (longopts): Add mount-commands to options list. + (usage): Add mount-commands option. + (mount_commands): New function. Write commands to recreate current + mounts. + Sat Sep 1 15:58:11 2001 Christopher Faylor <cgf@cygnus.com> * mount.cc (main): Eliminate excess arguments in printf. diff --git a/winsup/utils/mount.cc b/winsup/utils/mount.cc index 4741bb0..75b45d2 100644 --- a/winsup/utils/mount.cc +++ b/winsup/utils/mount.cc @@ -22,6 +22,7 @@ details. */ #endif #include <errno.h> +static void mount_commands (void); static void show_mounts (void); static void show_cygdrive_info (void); static void change_cygdrive_prefix (const char *new_prefix, int flags); @@ -98,10 +99,11 @@ struct option longopts[] = {"cygwin-executable", no_argument, NULL, 'X'}, {"show-cygdrive-prefix", no_argument, NULL, 'p'}, {"import-old-mounts", no_argument, NULL, 'i'}, + {"mount-commands", no_argument, NULL, 'm'}, {NULL, 0, NULL, 0} }; -char opts[] = "hbfstuxXpic"; +char opts[] = "hbfstuxXpicm"; static void usage (void) @@ -121,6 +123,8 @@ usage (void) -x, --executable treat all files under mount point as executables\n\ -X, --cygwin-executable treat all files under mount point as cygwin\n\ executables\n\ + -m, --mount-commands write mount commands to replace user and\n\ + system mount points and cygdrive prefixes\n\ ", progname); exit (1); } @@ -135,7 +139,8 @@ main (int argc, char **argv) nada, saw_change_cygdrive_prefix, saw_import_old_mounts, - saw_show_cygdrive_prefix + saw_show_cygdrive_prefix, + saw_mount_commands } do_what = nada; progname = argv[0]; @@ -188,6 +193,12 @@ main (int argc, char **argv) case 'x': flags |= MOUNT_EXEC; break; + case 'm': + if (do_what == nada) + do_what = saw_mount_commands; + else + usage (); + break; default: usage (); } @@ -211,6 +222,11 @@ main (int argc, char **argv) usage (); show_cygdrive_info (); break; + case saw_mount_commands: + if (optind <= argc) + usage (); + mount_commands (); + break; default: if (optind != (argc - 1)) { @@ -234,6 +250,62 @@ main (int argc, char **argv) } static void +mount_commands (void) +{ + FILE *m = setmntent ("/-not-used-", "r"); + struct mntent *p; + char *c; + const char *format_mnt = "mount%s \"%s\" \"%s\"\n"; + const char *format_cyg = "mount%s --change-cygdrive-prefix \"%s\"\n"; + char opts[MAX_PATH]; + char user[MAX_PATH]; + char system[MAX_PATH]; + char user_flags[MAX_PATH]; + char system_flags[MAX_PATH]; + + // write mount commands for user and system mount points + while ((p = getmntent (m)) != NULL) { + strcpy(opts, " -f"); + if (p->mnt_type[0] == 'u') + strcat (opts, " -u"); + else if (p->mnt_type[0] == 's') + strcat (opts, " -s"); + if (p->mnt_opts[0] == 'b') + strcat (opts, " -b"); + else if (p->mnt_opts[0] == 't') + strcat (opts, " -t"); + if (strstr (p->mnt_opts, ",exec")) + strcat (opts, " -x"); + while ((c = strchr (p->mnt_fsname, '\\')) != NULL) + *c = '/'; + printf (format_mnt, opts, p->mnt_fsname, p->mnt_dir); + } + endmntent (m); + + // write mount commands for cygdrive prefixes + cygwin_internal (CW_GET_CYGDRIVE_INFO, user, system, user_flags, + system_flags); + if (strlen (user) > 0) { + strcpy (opts, " "); + if (user_flags[0] == 'b') + strcat (opts, " -b"); + else if (user_flags[0] == 't') + strcat (opts, " -t"); + printf (format_cyg, opts, user); + } + if (strlen (system) > 0) { + strcpy (opts, " -s"); + if (system_flags[0] == 'b') + strcat (opts, " -b"); + else if (system_flags[0] == 't') + strcat (opts, " -t"); + printf (format_cyg, opts, system); + } + + exit(0); +} + +static void show_mounts (void) { FILE *m = setmntent ("/-not-used-", "r"); |