diff options
| author | Roy Marples <roy@marples.name> | 2007-10-29 16:02:18 +0000 | 
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2007-10-29 16:02:18 +0000 | 
| commit | c9fe3ade4c2d736a708d335bcace3b0cd3bee168 (patch) | |
| tree | 1a4eca96c6080aa701de358a809189d5ca034f6e | |
| parent | 8c85fa399fa1ed6ac3e402ef557fcd44d1787859 (diff) | |
| download | openrc-c9fe3ade4c2d736a708d335bcace3b0cd3bee168.tar.xz | |
rc --override foo will override the runlevel to load after boot or single user runlevels to avoid rc recursion, #196338
| -rw-r--r-- | ChangeLog | 3 | ||||
| -rw-r--r-- | src/_usage.c | 15 | ||||
| -rw-r--r-- | src/checkown.c | 1 | ||||
| -rw-r--r-- | src/fstabinfo.c | 1 | ||||
| -rw-r--r-- | src/rc.c | 15 | 
5 files changed, 28 insertions, 7 deletions
| @@ -3,6 +3,9 @@    29 Oct 2007; Roy Marples <uberlord@gentoo.org>: +    rc --override foo will override the runlevel to load after boot +    or single user runlevels to avoid rc recursion, #196338 +      /etc/mtab is now a true reflection on /proc/mounts.      The only exception is that we punt any / on tmpfs entry, #194615. diff --git a/src/_usage.c b/src/_usage.c index 6b96510d..78d1e337 100644 --- a/src/_usage.c +++ b/src/_usage.c @@ -20,9 +20,18 @@ static void usage (int exit_status)  	for (i = 0; longopts[i].name; ++i) {  		int len = printf ("  -%c, --%s %s", longopts[i].val, longopts[i].name,  		                  has_arg[longopts[i].has_arg]); -		while (++len < 37) -			printf (" "); -		puts (longopts_help[i]); + +		char *lo = xstrdup (longopts_help[i]); +		char *p = lo; +		char *token; + +		while ((token = strsep (&p, "\n"))) { +			while (++len < 37) +				printf (" "); +			puts (token); +			len = 0; +		} +		free (lo);  	}  	exit (exit_status);  } diff --git a/src/checkown.c b/src/checkown.c index 9fd9de1a..17ead7b8 100644 --- a/src/checkown.c +++ b/src/checkown.c @@ -22,6 +22,7 @@  #include "builtins.h"  #include "einfo.h" +#include "rc-misc.h"  static char *applet = NULL; diff --git a/src/fstabinfo.c b/src/fstabinfo.c index 4d927f71..5d840caa 100644 --- a/src/fstabinfo.c +++ b/src/fstabinfo.c @@ -46,6 +46,7 @@  #include "builtins.h"  #include "einfo.h"  #include "rc.h" +#include "rc-misc.h"  #include "strlist.h"  #ifdef HAVE_GETMNTENT @@ -544,7 +544,7 @@ static void single_user (void)  #endif  } -static void set_ksoftlevel (const char *level) +static bool set_ksoftlevel (const char *level)  {  	FILE *fp; @@ -556,16 +556,17 @@ static void set_ksoftlevel (const char *level)  		if (exists (RC_KSOFTLEVEL) &&  			unlink (RC_KSOFTLEVEL) != 0)  			eerror ("unlink `%s': %s", RC_KSOFTLEVEL, strerror (errno)); -		return; +		return (false);  	}  	if (! (fp = fopen (RC_KSOFTLEVEL, "w"))) {  		eerror ("fopen `%s': %s", RC_KSOFTLEVEL, strerror (errno)); -		return; +		return (false);  	}  	fprintf (fp, "%s", level);  	fclose (fp); +	return (true);  }  static int get_ksoftlevel (char *buffer, int buffer_len) @@ -718,11 +719,13 @@ static void run_script (const char *script) {  }  #include "_usage.h" -#define getoptstring getoptstring_COMMON +#define getoptstring "o:" getoptstring_COMMON  static struct option longopts[] = { +	{ "override", 1, NULL, 'o' },  	longopts_COMMON  };  static const char * const longopts_help[] = { +	"override the next runlevel to change into\nwhen leaving single user or boot runlevels",  	longopts_help_COMMON  };  #include "_usage.c" @@ -870,6 +873,10 @@ int main (int argc, char **argv)  							   longopts, (int *) 0)) != -1)  	{  		switch (opt) { +			case 'o': +				if (strlen (optarg) == 0) +					optarg = NULL; +				exit (set_ksoftlevel (optarg) ? EXIT_SUCCESS : EXIT_FAILURE);  			case_RC_COMMON_GETOPT  		}  	} | 
