ifupdown: parse() returning NULL and returning "" is not the same,
it turned out! wow... okay, fixing my buglet...
This commit is contained in:
		
							
								
								
									
										3
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								Makefile
									
									
									
									
									
								
							@@ -573,7 +573,8 @@ ifdef CONFIG_STATIC
 | 
			
		||||
      -Wl,--warn-common -Wl,--sort-common -Wl,--gc-sections \
 | 
			
		||||
      -Wl,--start-group $(busybox-all) -Wl,--end-group
 | 
			
		||||
else
 | 
			
		||||
      cmd_busybox__ ?= $(srctree)/scripts/trylink $(CC) -o $@ $(LDFLAGS) \
 | 
			
		||||
      cmd_busybox__ ?= $(srctree)/scripts/trylink $(CC) $(LDFLAGS) \
 | 
			
		||||
      -o $@ \
 | 
			
		||||
      -Wl,--warn-common -Wl,--sort-common -Wl,--gc-sections \
 | 
			
		||||
      -Wl,--start-group $(busybox-all) -Wl,--end-group
 | 
			
		||||
endif
 | 
			
		||||
 
 | 
			
		||||
@@ -103,7 +103,7 @@ enum {
 | 
			
		||||
#define FORCE (option_mask32 & OPT_force)
 | 
			
		||||
#define NO_MAPPINGS (option_mask32 & OPT_no_mappings)
 | 
			
		||||
 | 
			
		||||
static char **__myenviron;
 | 
			
		||||
static char **my_environ;
 | 
			
		||||
 | 
			
		||||
static char *startup_PATH;
 | 
			
		||||
 | 
			
		||||
@@ -187,7 +187,7 @@ static char *parse(const char *command, struct interface_defn_t *ifd)
 | 
			
		||||
	size_t old_pos[MAX_OPT_DEPTH] = { 0 };
 | 
			
		||||
	int okay[MAX_OPT_DEPTH] = { 1 };
 | 
			
		||||
	int opt_depth = 1;
 | 
			
		||||
	char *result = xstrdup("");
 | 
			
		||||
	char *result = NULL;
 | 
			
		||||
 | 
			
		||||
	while (*command) {
 | 
			
		||||
		switch (*command) {
 | 
			
		||||
@@ -206,7 +206,7 @@ static char *parse(const char *command, struct interface_defn_t *ifd)
 | 
			
		||||
			break;
 | 
			
		||||
		case '[':
 | 
			
		||||
			if (command[1] == '[' && opt_depth < MAX_OPT_DEPTH) {
 | 
			
		||||
				old_pos[opt_depth] = strlen(result);
 | 
			
		||||
				old_pos[opt_depth] = result ? strlen(result) : 0;
 | 
			
		||||
				okay[opt_depth] = 1;
 | 
			
		||||
				opt_depth++;
 | 
			
		||||
				command += 2;
 | 
			
		||||
@@ -290,7 +290,7 @@ static int execute(const char *command, struct interface_defn_t *ifd, execfn *ex
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	out = parse(command, ifd);
 | 
			
		||||
	if (!out || !out[0]) {
 | 
			
		||||
	if (!out) {
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	ret = (*exec)(out);
 | 
			
		||||
@@ -871,15 +871,15 @@ static void set_environ(struct interface_defn_t *iface, const char *mode)
 | 
			
		||||
	const int n_env_entries = iface->n_options + 5;
 | 
			
		||||
	char **ppch;
 | 
			
		||||
 | 
			
		||||
	if (__myenviron != NULL) {
 | 
			
		||||
		for (ppch = __myenviron; *ppch; ppch++) {
 | 
			
		||||
	if (my_environ != NULL) {
 | 
			
		||||
		for (ppch = my_environ; *ppch; ppch++) {
 | 
			
		||||
			free(*ppch);
 | 
			
		||||
			*ppch = NULL;
 | 
			
		||||
		}
 | 
			
		||||
		free(__myenviron);
 | 
			
		||||
		free(my_environ);
 | 
			
		||||
	}
 | 
			
		||||
	__myenviron = xzalloc(sizeof(char *) * (n_env_entries + 1 /* for final NULL */ ));
 | 
			
		||||
	environend = __myenviron;
 | 
			
		||||
	my_environ = xzalloc(sizeof(char *) * (n_env_entries + 1 /* for final NULL */ ));
 | 
			
		||||
	environend = my_environ;
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < iface->n_options; i++) {
 | 
			
		||||
		if (strcmp(iface->option[i].name, "up") == 0
 | 
			
		||||
@@ -903,6 +903,9 @@ static int doit(char *str)
 | 
			
		||||
	if (option_mask32 & (OPT_no_act|OPT_verbose)) {
 | 
			
		||||
		puts(str);
 | 
			
		||||
	}
 | 
			
		||||
	/* FIXME: is it true that we can reach this place with str = ""? */
 | 
			
		||||
	/* how? in execute() parse() may return "", then we do (*exec)(""); */
 | 
			
		||||
	/* Please add a comment... */
 | 
			
		||||
	if (!(option_mask32 & OPT_no_act)) {
 | 
			
		||||
		pid_t child;
 | 
			
		||||
		int status;
 | 
			
		||||
@@ -912,7 +915,7 @@ static int doit(char *str)
 | 
			
		||||
		case -1: /* failure */
 | 
			
		||||
			return 0;
 | 
			
		||||
		case 0: /* child */
 | 
			
		||||
			execle(DEFAULT_SHELL, DEFAULT_SHELL, "-c", str, NULL, __myenviron);
 | 
			
		||||
			execle(DEFAULT_SHELL, DEFAULT_SHELL, "-c", str, NULL, my_environ);
 | 
			
		||||
			exit(127);
 | 
			
		||||
		}
 | 
			
		||||
		waitpid(child, &status, 0);
 | 
			
		||||
@@ -1206,7 +1209,7 @@ int ifupdown_main(int argc, char **argv)
 | 
			
		||||
				okay = 1;
 | 
			
		||||
				currif->iface = iface;
 | 
			
		||||
 | 
			
		||||
				debug_noise("\nZ Configuring interface %s (%s)\n", liface, currif->address_family->name);
 | 
			
		||||
				debug_noise("\nConfiguring interface %s (%s)\n", liface, currif->address_family->name);
 | 
			
		||||
 | 
			
		||||
				/* Call the cmds function pointer, does either iface_up() or iface_down() */
 | 
			
		||||
				cmds_ret = cmds(currif);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user