int verbose;
int sloppy;
+#define FOREGROUND (0)
+#define BACKGROUND (1)
+
static struct option longopts[] = {
{ "fake", 0, 0, 'f' },
{ "help", 0, 0, 'h' },
void mount_usage(void)
{
- printf(_("usage: %s remotetarget dir [-rvVwfnh] [-o nfsoptions]\n"),
+ printf(_("usage: %s remotetarget dir [-rvVwfnsh] [-o nfsoptions]\n"),
progname);
printf(_("options:\n"));
printf(_("\t-r\t\tMount file system readonly\n"));
printf(_("\t-w\t\tMount file system read-write\n"));
printf(_("\t-f\t\tFake mount, do not actually mount\n"));
printf(_("\t-n\t\tDo not update /etc/mtab\n"));
- printf(_("\t-s\t\tTolerate sloppy mount options rather than failing.\n"));
+ printf(_("\t-s\t\tTolerate sloppy mount options rather than fail\n"));
printf(_("\t-h\t\tPrint this help\n"));
printf(_("\tnfsoptions\tRefer to mount.nfs(8) or nfs(5)\n\n"));
}
}
mnt_err = try_mount(spec, mount_point, flags, fs_type, &extra_opts,
- mount_opts, fake, nomtab, 0);
+ mount_opts, fake, nomtab, FOREGROUND);
+ if (mnt_err == EX_BG) {
+ printf(_("mount: backgrounding \"%s\"\n"), spec);
+ fflush(stdout);
+
+ /*
+ * Parent exits immediately with success. Make
+ * sure not to free "mount_point"
+ */
+ if (fork() > 0)
+ exit(0);
+
+ mnt_err = try_mount(spec, mount_point, flags, fs_type,
+ &extra_opts, mount_opts, fake,
+ nomtab, BACKGROUND);
+ if (verbose && mnt_err)
+ printf(_("%s: giving up \"%s\"\n"),
+ progname, spec);
+ exit(0);
+ }
out:
free(mount_point);