From: Denis Vlasenko Date: Sun, 20 May 2007 17:01:14 +0000 (-0000) Subject: applied post-1.5.0 fixes X-Git-Tag: 1_5_1 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=f7ae2cbc036beb76ba0b121ed9b0b64598bdf125;p=oweals%2Fbusybox.git applied post-1.5.0 fixes --- diff --git a/Makefile b/Makefile index 89a3d2e75..06b6da5c6 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ VERSION = 1 PATCHLEVEL = 5 -SUBLEVEL = 0 +SUBLEVEL = 1 EXTRAVERSION = NAME = Unnamed diff --git a/editors/sed.c b/editors/sed.c index f7f22f750..8500989ba 100644 --- a/editors/sed.c +++ b/editors/sed.c @@ -481,7 +481,7 @@ static void add_cmd(const char *cmdstr) if (bbg.add_cmd_line) { char *tp = xasprintf("%s\n%s", bbg.add_cmd_line, cmdstr); free(bbg.add_cmd_line); - bbg.add_cmd_line = tp; + cmdstr = bbg.add_cmd_line = tp; } /* If this line ends with backslash, request next line. */ diff --git a/miscutils/hdparm.c b/miscutils/hdparm.c index 0138eed92..b5297775a 100644 --- a/miscutils/hdparm.c +++ b/miscutils/hdparm.c @@ -1569,9 +1569,9 @@ static void process_dev(char *devname) if (set_mult) { print_flag(get_mult, "multcount", mult); #ifdef HDIO_DRIVE_CMD - bb_ioctl(fd, HDIO_SET_MULTCOUNT, &mult, "HDIO_SET_MULTCOUNT"); + bb_ioctl(fd, HDIO_SET_MULTCOUNT, (void *)mult, "HDIO_SET_MULTCOUNT"); #else - force_operation |= (!bb_ioctl(fd, HDIO_SET_MULTCOUNT, &mult, "HDIO_SET_MULTCOUNT")); + force_operation |= (!bb_ioctl(fd, HDIO_SET_MULTCOUNT, (void *)mult, "HDIO_SET_MULTCOUNT")); #endif } if (set_readonly) { diff --git a/networking/ifupdown.c b/networking/ifupdown.c index 887c2eea5..74646c6f5 100644 --- a/networking/ifupdown.c +++ b/networking/ifupdown.c @@ -1083,15 +1083,32 @@ static llist_t *find_iface_state(llist_t *state_list, const char *iface) return NULL; } +/* read the previous state from the state file */ +static llist_t *read_iface_state(void) { + llist_t *state_list = NULL; + FILE *state_fp; + state_fp = fopen("/var/run/ifstate", "r"); + if (state_fp) { + char *start, *end_ptr; + while ((start = xmalloc_fgets(state_fp)) != NULL) { + /* We should only need to check for a single character */ + end_ptr = start + strcspn(start, " \t\n"); + *end_ptr = '\0'; + llist_add_to(&state_list, start); + } + fclose(state_fp); + } + return state_list; +} + + int ifupdown_main(int argc, char **argv); int ifupdown_main(int argc, char **argv) { int (*cmds)(struct interface_defn_t *) = NULL; struct interfaces_file_t *defn; - llist_t *state_list = NULL; llist_t *target_list = NULL; const char *interfaces = "/etc/network/interfaces"; - FILE *state_fp; bool any_failures = 0; cmds = iface_down; @@ -1118,32 +1135,9 @@ int ifupdown_main(int argc, char **argv) startup_PATH = getenv("PATH"); if (!startup_PATH) startup_PATH = ""; - /* Read the previous state from the state file */ - state_fp = fopen("/var/run/ifstate", "r"); - if (state_fp) { - char *start, *end_ptr; - while ((start = xmalloc_fgets(state_fp)) != NULL) { - /* We should only need to check for a single character */ - end_ptr = start + strcspn(start, " \t\n"); - *end_ptr = '\0'; - llist_add_to(&state_list, start); - } - fclose(state_fp); - } - /* Create a list of interfaces to work on */ if (DO_ALL) { - if (cmds == iface_up) { - target_list = defn->autointerfaces; - } else { - /* iface_down */ - const llist_t *list = state_list; - while (list) { - llist_add_to_end(&target_list, xstrdup(list->data)); - list = list->link; - } - target_list = defn->autointerfaces; - } + target_list = defn->autointerfaces; } else { llist_add_to_end(&target_list, argv[optind]); } @@ -1170,6 +1164,7 @@ int ifupdown_main(int argc, char **argv) } if (!FORCE) { + llist_t *state_list = read_iface_state(); const llist_t *iface_state = find_iface_state(state_list, iface); if (cmds == iface_up) { @@ -1185,6 +1180,7 @@ int ifupdown_main(int argc, char **argv) continue; } } + llist_free(state_list, free); } #if ENABLE_FEATURE_IFUPDOWN_MAPPING @@ -1239,6 +1235,8 @@ int ifupdown_main(int argc, char **argv) bb_error_msg("ignoring unknown interface %s", liface); any_failures = 1; } else { + /* update the state file */ + llist_t *state_list = read_iface_state(); llist_t *iface_state = find_iface_state(state_list, iface); if (cmds == iface_up) { @@ -1254,19 +1252,21 @@ int ifupdown_main(int argc, char **argv) llist_unlink(&state_list, iface_state); free(llist_pop(&iface_state)); } - } - } - /* Actually write the new state */ - if (!NO_ACT) { - state_fp = xfopen("/var/run/ifstate", "w"); - while (state_list) { - if (state_list->data) { - fprintf(state_fp, "%s\n", state_list->data); + /* Actually write the new state */ + if (!NO_ACT) { + FILE *state_fp = xfopen("/var/run/ifstate", "w"); + llist_t *state = state_list; + while (state) { + if (state->data) { + fprintf(state_fp, "%s\n", state->data); + } + state = state->link; + } + fclose(state_fp); } - state_list = state_list->link; + llist_free(state_list, free); } - fclose(state_fp); } return any_failures; diff --git a/procps/ps.c b/procps/ps.c index c1cb64397..2be0b3605 100644 --- a/procps/ps.c +++ b/procps/ps.c @@ -262,7 +262,9 @@ int ps_main(int argc, char **argv) parse_o(default_o); post_process(); - terminal_width = INT_MAX; + /* Was INT_MAX, but some libc's go belly up with printf("%.*s") + * and such large widths */ + terminal_width = 30000; if (isatty(1)) { get_terminal_width_height(1, &terminal_width, NULL); terminal_width--; diff --git a/shell/hush.c b/shell/hush.c index 7658aebed..cc0cb69bd 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -1840,7 +1840,7 @@ static int set_local_var(const char *s, int flg_export) result = -1; } else { cur->name = strdup(name); - if (cur->name) { + if (!cur->name) { free(cur); result = -1; } else {