diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2011-01-16 20:00:24 +0100 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2011-01-16 20:00:24 +0100 |
| commit | 12d97b66805f87e535962963e858fc2422ffdbc7 (patch) | |
| tree | 10836c6158a05a505d8a7cb83313cc908e837a50 | |
| parent | 2a1571bfa003233470140a17be4ae4f0239f5a24 (diff) | |
| download | busybox-w32-1_18_2.tar.gz busybox-w32-1_18_2.tar.bz2 busybox-w32-1_18_2.zip | |
apply post-1.18.1 patches, bump version to 1.18.21_18_2
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | archival/bzip2.c | 6 | ||||
| -rw-r--r-- | archival/cpio.c | 4 | ||||
| -rw-r--r-- | archival/libarchive/bz/bzlib.c | 4 | ||||
| -rw-r--r-- | libbb/procps.c | 4 | ||||
| -rw-r--r-- | modutils/modprobe-small.c | 6 | ||||
| -rw-r--r-- | networking/httpd.c | 1 | ||||
| -rw-r--r-- | networking/tftp.c | 39 | ||||
| -rw-r--r-- | shell/hush.c | 105 | ||||
| -rw-r--r-- | util-linux/mkswap.c | 2 |
10 files changed, 86 insertions, 87 deletions
| @@ -1,6 +1,6 @@ | |||
| 1 | VERSION = 1 | 1 | VERSION = 1 |
| 2 | PATCHLEVEL = 18 | 2 | PATCHLEVEL = 18 |
| 3 | SUBLEVEL = 1 | 3 | SUBLEVEL = 2 |
| 4 | EXTRAVERSION = | 4 | EXTRAVERSION = |
| 5 | NAME = Unnamed | 5 | NAME = Unnamed |
| 6 | 6 | ||
diff --git a/archival/bzip2.c b/archival/bzip2.c index a6abc931c..ab08ffc1a 100644 --- a/archival/bzip2.c +++ b/archival/bzip2.c | |||
| @@ -128,10 +128,12 @@ IF_DESKTOP(long long) int FAST_FUNC compressStream(unpack_info_t *info UNUSED_PA | |||
| 128 | break; | 128 | break; |
| 129 | } | 129 | } |
| 130 | 130 | ||
| 131 | #if ENABLE_FEATURE_CLEAN_UP | 131 | /* Can't be conditional on ENABLE_FEATURE_CLEAN_UP - |
| 132 | * we are called repeatedly | ||
| 133 | */ | ||
| 132 | BZ2_bzCompressEnd(strm); | 134 | BZ2_bzCompressEnd(strm); |
| 133 | free(iobuf); | 135 | free(iobuf); |
| 134 | #endif | 136 | |
| 135 | return total; | 137 | return total; |
| 136 | } | 138 | } |
| 137 | 139 | ||
diff --git a/archival/cpio.c b/archival/cpio.c index 6ab268821..9fa8badc5 100644 --- a/archival/cpio.c +++ b/archival/cpio.c | |||
| @@ -308,16 +308,12 @@ int cpio_main(int argc UNUSED_PARAM, char **argv) | |||
| 308 | /* -L makes sense only with -o or -p */ | 308 | /* -L makes sense only with -o or -p */ |
| 309 | 309 | ||
| 310 | #if !ENABLE_FEATURE_CPIO_O | 310 | #if !ENABLE_FEATURE_CPIO_O |
| 311 | /* no parameters */ | ||
| 312 | opt_complementary = "=0"; | ||
| 313 | opt = getopt32(argv, OPTION_STR, &cpio_filename); | 311 | opt = getopt32(argv, OPTION_STR, &cpio_filename); |
| 314 | argv += optind; | 312 | argv += optind; |
| 315 | if (opt & CPIO_OPT_FILE) { /* -F */ | 313 | if (opt & CPIO_OPT_FILE) { /* -F */ |
| 316 | xmove_fd(xopen(cpio_filename, O_RDONLY), STDIN_FILENO); | 314 | xmove_fd(xopen(cpio_filename, O_RDONLY), STDIN_FILENO); |
| 317 | } | 315 | } |
| 318 | #else | 316 | #else |
| 319 | /* _exactly_ one parameter for -p, thus <= 1 param if -p is allowed */ | ||
| 320 | opt_complementary = ENABLE_FEATURE_CPIO_P ? "?1" : "=0"; | ||
| 321 | opt = getopt32(argv, OPTION_STR "oH:" IF_FEATURE_CPIO_P("p"), &cpio_filename, &cpio_fmt); | 317 | opt = getopt32(argv, OPTION_STR "oH:" IF_FEATURE_CPIO_P("p"), &cpio_filename, &cpio_fmt); |
| 322 | argv += optind; | 318 | argv += optind; |
| 323 | if ((opt & (CPIO_OPT_FILE|CPIO_OPT_CREATE)) == CPIO_OPT_FILE) { /* -F without -o */ | 319 | if ((opt & (CPIO_OPT_FILE|CPIO_OPT_CREATE)) == CPIO_OPT_FILE) { /* -F without -o */ |
diff --git a/archival/libarchive/bz/bzlib.c b/archival/libarchive/bz/bzlib.c index b3beeabed..5f7db747a 100644 --- a/archival/libarchive/bz/bzlib.c +++ b/archival/libarchive/bz/bzlib.c | |||
| @@ -361,7 +361,6 @@ int BZ2_bzCompress(bz_stream *strm, int action) | |||
| 361 | 361 | ||
| 362 | 362 | ||
| 363 | /*---------------------------------------------------*/ | 363 | /*---------------------------------------------------*/ |
| 364 | #if ENABLE_FEATURE_CLEAN_UP | ||
| 365 | static | 364 | static |
| 366 | void BZ2_bzCompressEnd(bz_stream *strm) | 365 | void BZ2_bzCompressEnd(bz_stream *strm) |
| 367 | { | 366 | { |
| @@ -372,9 +371,8 @@ void BZ2_bzCompressEnd(bz_stream *strm) | |||
| 372 | free(s->arr2); | 371 | free(s->arr2); |
| 373 | free(s->ftab); | 372 | free(s->ftab); |
| 374 | free(s->crc32table); | 373 | free(s->crc32table); |
| 375 | free(strm->state); | 374 | free(s); |
| 376 | } | 375 | } |
| 377 | #endif | ||
| 378 | 376 | ||
| 379 | 377 | ||
| 380 | /*---------------------------------------------------*/ | 378 | /*---------------------------------------------------*/ |
diff --git a/libbb/procps.c b/libbb/procps.c index 792466048..33932a3a3 100644 --- a/libbb/procps.c +++ b/libbb/procps.c | |||
| @@ -154,6 +154,7 @@ static unsigned long fast_strtoul_10(char **endptr) | |||
| 154 | return n; | 154 | return n; |
| 155 | } | 155 | } |
| 156 | 156 | ||
| 157 | # if ENABLE_FEATURE_FAST_TOP | ||
| 157 | static long fast_strtol_10(char **endptr) | 158 | static long fast_strtol_10(char **endptr) |
| 158 | { | 159 | { |
| 159 | if (**endptr != '-') | 160 | if (**endptr != '-') |
| @@ -162,6 +163,7 @@ static long fast_strtol_10(char **endptr) | |||
| 162 | (*endptr)++; | 163 | (*endptr)++; |
| 163 | return - (long)fast_strtoul_10(endptr); | 164 | return - (long)fast_strtoul_10(endptr); |
| 164 | } | 165 | } |
| 166 | # endif | ||
| 165 | 167 | ||
| 166 | static char *skip_fields(char *str, int count) | 168 | static char *skip_fields(char *str, int count) |
| 167 | { | 169 | { |
| @@ -448,7 +450,7 @@ procps_status_t* FAST_FUNC procps_scan(procps_status_t* sp, int flags) | |||
| 448 | //FIXME: is it safe to assume this field exists? | 450 | //FIXME: is it safe to assume this field exists? |
| 449 | sp->last_seen_on_cpu = fast_strtoul_10(&cp); | 451 | sp->last_seen_on_cpu = fast_strtoul_10(&cp); |
| 450 | # endif | 452 | # endif |
| 451 | #endif /* end of !ENABLE_FEATURE_TOP_SMP_PROCESS */ | 453 | #endif /* FEATURE_FAST_TOP */ |
| 452 | 454 | ||
| 453 | #if ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS | 455 | #if ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS |
| 454 | sp->niceness = tasknice; | 456 | sp->niceness = tasknice; |
diff --git a/modutils/modprobe-small.c b/modutils/modprobe-small.c index ec3ddfb8f..f4f17e766 100644 --- a/modutils/modprobe-small.c +++ b/modutils/modprobe-small.c | |||
| @@ -844,13 +844,15 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv) | |||
| 844 | void *map; | 844 | void *map; |
| 845 | 845 | ||
| 846 | len = MAXINT(ssize_t); | 846 | len = MAXINT(ssize_t); |
| 847 | map = xmalloc_xopen_read_close(*argv, &len); | 847 | map = xmalloc_open_zipped_read_close(*argv, &len); |
| 848 | if (init_module(map, len, | 848 | if (init_module(map, len, |
| 849 | IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(options ? options : "") | 849 | IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(options ? options : "") |
| 850 | IF_NOT_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE("") | 850 | IF_NOT_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE("") |
| 851 | ) != 0) | 851 | ) != 0 |
| 852 | ) { | ||
| 852 | bb_error_msg_and_die("can't insert '%s': %s", | 853 | bb_error_msg_and_die("can't insert '%s': %s", |
| 853 | *argv, moderror(errno)); | 854 | *argv, moderror(errno)); |
| 855 | } | ||
| 854 | return 0; | 856 | return 0; |
| 855 | } | 857 | } |
| 856 | 858 | ||
diff --git a/networking/httpd.c b/networking/httpd.c index fa42d9850..b8113a843 100644 --- a/networking/httpd.c +++ b/networking/httpd.c | |||
| @@ -1522,6 +1522,7 @@ static NOINLINE void send_file_and_exit(const char *url, int what) | |||
| 1522 | struct stat sb; | 1522 | struct stat sb; |
| 1523 | fstat(fd, &sb); | 1523 | fstat(fd, &sb); |
| 1524 | file_size = sb.st_size; | 1524 | file_size = sb.st_size; |
| 1525 | last_mod = sb.st_mtime; | ||
| 1525 | } else { | 1526 | } else { |
| 1526 | IF_FEATURE_HTTPD_GZIP(content_gzip = 0;) | 1527 | IF_FEATURE_HTTPD_GZIP(content_gzip = 0;) |
| 1527 | fd = open(url, O_RDONLY); | 1528 | fd = open(url, O_RDONLY); |
diff --git a/networking/tftp.c b/networking/tftp.c index 04c8f0ebb..fcd933f6a 100644 --- a/networking/tftp.c +++ b/networking/tftp.c | |||
| @@ -105,39 +105,22 @@ struct BUG_G_too_big { | |||
| 105 | #define error_pkt_str (error_pkt + 4) | 105 | #define error_pkt_str (error_pkt + 4) |
| 106 | 106 | ||
| 107 | #if ENABLE_FEATURE_TFTP_PROGRESS_BAR | 107 | #if ENABLE_FEATURE_TFTP_PROGRESS_BAR |
| 108 | /* SIGALRM logic nicked from the wget applet */ | 108 | static void tftp_progress_update(void) |
| 109 | static void progress_meter(int flag) | ||
| 110 | { | 109 | { |
| 111 | /* We can be called from signal handler */ | ||
| 112 | int save_errno = errno; | ||
| 113 | |||
| 114 | if (flag == -1) { /* first call to progress_meter */ | ||
| 115 | bb_progress_init(&G.pmt); | ||
| 116 | } | ||
| 117 | |||
| 118 | bb_progress_update(&G.pmt, G.file, 0, G.pos, G.size); | 110 | bb_progress_update(&G.pmt, G.file, 0, G.pos, G.size); |
| 119 | |||
| 120 | if (flag == 0) { | ||
| 121 | /* last call to progress_meter */ | ||
| 122 | alarm(0); | ||
| 123 | bb_putchar_stderr('\n'); | ||
| 124 | } else { | ||
| 125 | if (flag == -1) { /* first call to progress_meter */ | ||
| 126 | signal_SA_RESTART_empty_mask(SIGALRM, progress_meter); | ||
| 127 | } | ||
| 128 | alarm(1); | ||
| 129 | } | ||
| 130 | |||
| 131 | errno = save_errno; | ||
| 132 | } | 111 | } |
| 133 | static void tftp_progress_init(void) | 112 | static void tftp_progress_init(void) |
| 134 | { | 113 | { |
| 135 | progress_meter(-1); | 114 | bb_progress_init(&G.pmt); |
| 115 | tftp_progress_update(); | ||
| 136 | } | 116 | } |
| 137 | static void tftp_progress_done(void) | 117 | static void tftp_progress_done(void) |
| 138 | { | 118 | { |
| 139 | if (G.pmt.inited) | 119 | if (G.pmt.inited) { |
| 140 | progress_meter(0); | 120 | tftp_progress_update(); |
| 121 | bb_putchar_stderr('\n'); | ||
| 122 | G.pmt.inited = 0; | ||
| 123 | } | ||
| 141 | } | 124 | } |
| 142 | #else | 125 | #else |
| 143 | # define tftp_progress_init() ((void)0) | 126 | # define tftp_progress_init() ((void)0) |
| @@ -460,9 +443,10 @@ static int tftp_protocol( | |||
| 460 | xsendto(socket_fd, xbuf, send_len, &peer_lsa->u.sa, peer_lsa->len); | 443 | xsendto(socket_fd, xbuf, send_len, &peer_lsa->u.sa, peer_lsa->len); |
| 461 | 444 | ||
| 462 | #if ENABLE_FEATURE_TFTP_PROGRESS_BAR | 445 | #if ENABLE_FEATURE_TFTP_PROGRESS_BAR |
| 463 | if (ENABLE_TFTP && remote_file) { /* tftp */ | 446 | if (ENABLE_TFTP && remote_file) /* tftp */ |
| 464 | G.pos = (block_nr - 1) * (uoff_t)blksize; | 447 | G.pos = (block_nr - 1) * (uoff_t)blksize; |
| 465 | } | 448 | if (G.pmt.inited) |
| 449 | tftp_progress_update(); | ||
| 466 | #endif | 450 | #endif |
| 467 | /* Was it final ACK? then exit */ | 451 | /* Was it final ACK? then exit */ |
| 468 | if (finished && (opcode == TFTP_ACK)) | 452 | if (finished && (opcode == TFTP_ACK)) |
| @@ -479,6 +463,7 @@ static int tftp_protocol( | |||
| 479 | case 0: | 463 | case 0: |
| 480 | retries--; | 464 | retries--; |
| 481 | if (retries == 0) { | 465 | if (retries == 0) { |
| 466 | tftp_progress_done(); | ||
| 482 | bb_error_msg("timeout"); | 467 | bb_error_msg("timeout"); |
| 483 | goto ret; /* no err packet sent */ | 468 | goto ret; /* no err packet sent */ |
| 484 | } | 469 | } |
diff --git a/shell/hush.c b/shell/hush.c index fa7e4f563..f9f815289 100644 --- a/shell/hush.c +++ b/shell/hush.c | |||
| @@ -913,7 +913,7 @@ static const struct built_in_command bltins2[] = { | |||
| 913 | */ | 913 | */ |
| 914 | #if HUSH_DEBUG | 914 | #if HUSH_DEBUG |
| 915 | /* prevent disasters with G.debug_indent < 0 */ | 915 | /* prevent disasters with G.debug_indent < 0 */ |
| 916 | # define indent() fprintf(stderr, "%*s", (G.debug_indent * 2) & 0xff, "") | 916 | # define indent() fdprintf(2, "%*s", (G.debug_indent * 2) & 0xff, "") |
| 917 | # define debug_enter() (G.debug_indent++) | 917 | # define debug_enter() (G.debug_indent++) |
| 918 | # define debug_leave() (G.debug_indent--) | 918 | # define debug_leave() (G.debug_indent--) |
| 919 | #else | 919 | #else |
| @@ -923,56 +923,56 @@ static const struct built_in_command bltins2[] = { | |||
| 923 | #endif | 923 | #endif |
| 924 | 924 | ||
| 925 | #ifndef debug_printf | 925 | #ifndef debug_printf |
| 926 | # define debug_printf(...) (indent(), fprintf(stderr, __VA_ARGS__)) | 926 | # define debug_printf(...) (indent(), fdprintf(2, __VA_ARGS__)) |
| 927 | #endif | 927 | #endif |
| 928 | 928 | ||
| 929 | #ifndef debug_printf_parse | 929 | #ifndef debug_printf_parse |
| 930 | # define debug_printf_parse(...) (indent(), fprintf(stderr, __VA_ARGS__)) | 930 | # define debug_printf_parse(...) (indent(), fdprintf(2, __VA_ARGS__)) |
| 931 | #endif | 931 | #endif |
| 932 | 932 | ||
| 933 | #ifndef debug_printf_exec | 933 | #ifndef debug_printf_exec |
| 934 | #define debug_printf_exec(...) (indent(), fprintf(stderr, __VA_ARGS__)) | 934 | #define debug_printf_exec(...) (indent(), fdprintf(2, __VA_ARGS__)) |
| 935 | #endif | 935 | #endif |
| 936 | 936 | ||
| 937 | #ifndef debug_printf_env | 937 | #ifndef debug_printf_env |
| 938 | # define debug_printf_env(...) (indent(), fprintf(stderr, __VA_ARGS__)) | 938 | # define debug_printf_env(...) (indent(), fdprintf(2, __VA_ARGS__)) |
| 939 | #endif | 939 | #endif |
| 940 | 940 | ||
| 941 | #ifndef debug_printf_jobs | 941 | #ifndef debug_printf_jobs |
| 942 | # define debug_printf_jobs(...) (indent(), fprintf(stderr, __VA_ARGS__)) | 942 | # define debug_printf_jobs(...) (indent(), fdprintf(2, __VA_ARGS__)) |
| 943 | # define DEBUG_JOBS 1 | 943 | # define DEBUG_JOBS 1 |
| 944 | #else | 944 | #else |
| 945 | # define DEBUG_JOBS 0 | 945 | # define DEBUG_JOBS 0 |
| 946 | #endif | 946 | #endif |
| 947 | 947 | ||
| 948 | #ifndef debug_printf_expand | 948 | #ifndef debug_printf_expand |
| 949 | # define debug_printf_expand(...) (indent(), fprintf(stderr, __VA_ARGS__)) | 949 | # define debug_printf_expand(...) (indent(), fdprintf(2, __VA_ARGS__)) |
| 950 | # define DEBUG_EXPAND 1 | 950 | # define DEBUG_EXPAND 1 |
| 951 | #else | 951 | #else |
| 952 | # define DEBUG_EXPAND 0 | 952 | # define DEBUG_EXPAND 0 |
| 953 | #endif | 953 | #endif |
| 954 | 954 | ||
| 955 | #ifndef debug_printf_varexp | 955 | #ifndef debug_printf_varexp |
| 956 | # define debug_printf_varexp(...) (indent(), fprintf(stderr, __VA_ARGS__)) | 956 | # define debug_printf_varexp(...) (indent(), fdprintf(2, __VA_ARGS__)) |
| 957 | #endif | 957 | #endif |
| 958 | 958 | ||
| 959 | #ifndef debug_printf_glob | 959 | #ifndef debug_printf_glob |
| 960 | # define debug_printf_glob(...) (indent(), fprintf(stderr, __VA_ARGS__)) | 960 | # define debug_printf_glob(...) (indent(), fdprintf(2, __VA_ARGS__)) |
| 961 | # define DEBUG_GLOB 1 | 961 | # define DEBUG_GLOB 1 |
| 962 | #else | 962 | #else |
| 963 | # define DEBUG_GLOB 0 | 963 | # define DEBUG_GLOB 0 |
| 964 | #endif | 964 | #endif |
| 965 | 965 | ||
| 966 | #ifndef debug_printf_list | 966 | #ifndef debug_printf_list |
| 967 | # define debug_printf_list(...) (indent(), fprintf(stderr, __VA_ARGS__)) | 967 | # define debug_printf_list(...) (indent(), fdprintf(2, __VA_ARGS__)) |
| 968 | #endif | 968 | #endif |
| 969 | 969 | ||
| 970 | #ifndef debug_printf_subst | 970 | #ifndef debug_printf_subst |
| 971 | # define debug_printf_subst(...) (indent(), fprintf(stderr, __VA_ARGS__)) | 971 | # define debug_printf_subst(...) (indent(), fdprintf(2, __VA_ARGS__)) |
| 972 | #endif | 972 | #endif |
| 973 | 973 | ||
| 974 | #ifndef debug_printf_clean | 974 | #ifndef debug_printf_clean |
| 975 | # define debug_printf_clean(...) (indent(), fprintf(stderr, __VA_ARGS__)) | 975 | # define debug_printf_clean(...) (indent(), fdprintf(2, __VA_ARGS__)) |
| 976 | # define DEBUG_CLEAN 1 | 976 | # define DEBUG_CLEAN 1 |
| 977 | #else | 977 | #else |
| 978 | # define DEBUG_CLEAN 0 | 978 | # define DEBUG_CLEAN 0 |
| @@ -982,9 +982,9 @@ static const struct built_in_command bltins2[] = { | |||
| 982 | static void debug_print_strings(const char *prefix, char **vv) | 982 | static void debug_print_strings(const char *prefix, char **vv) |
| 983 | { | 983 | { |
| 984 | indent(); | 984 | indent(); |
| 985 | fprintf(stderr, "%s:\n", prefix); | 985 | fdprintf(2, "%s:\n", prefix); |
| 986 | while (*vv) | 986 | while (*vv) |
| 987 | fprintf(stderr, " '%s'\n", *vv++); | 987 | fdprintf(2, " '%s'\n", *vv++); |
| 988 | } | 988 | } |
| 989 | #else | 989 | #else |
| 990 | # define debug_print_strings(prefix, vv) ((void)0) | 990 | # define debug_print_strings(prefix, vv) ((void)0) |
| @@ -1416,6 +1416,22 @@ static void hush_exit(int exitcode) | |||
| 1416 | builtin_eval(argv); | 1416 | builtin_eval(argv); |
| 1417 | } | 1417 | } |
| 1418 | 1418 | ||
| 1419 | #if ENABLE_FEATURE_CLEAN_UP | ||
| 1420 | { | ||
| 1421 | struct variable *cur_var; | ||
| 1422 | if (G.cwd != bb_msg_unknown) | ||
| 1423 | free((char*)G.cwd); | ||
| 1424 | cur_var = G.top_var; | ||
| 1425 | while (cur_var) { | ||
| 1426 | struct variable *tmp = cur_var; | ||
| 1427 | if (!cur_var->max_len) | ||
| 1428 | free(cur_var->varstr); | ||
| 1429 | cur_var = cur_var->next; | ||
| 1430 | free(tmp); | ||
| 1431 | } | ||
| 1432 | } | ||
| 1433 | #endif | ||
| 1434 | |||
| 1419 | #if ENABLE_HUSH_JOB | 1435 | #if ENABLE_HUSH_JOB |
| 1420 | fflush_all(); | 1436 | fflush_all(); |
| 1421 | sigexit(- (exitcode & 0xff)); | 1437 | sigexit(- (exitcode & 0xff)); |
| @@ -2158,22 +2174,22 @@ static void debug_print_list(const char *prefix, o_string *o, int n) | |||
| 2158 | int i = 0; | 2174 | int i = 0; |
| 2159 | 2175 | ||
| 2160 | indent(); | 2176 | indent(); |
| 2161 | fprintf(stderr, "%s: list:%p n:%d string_start:%d length:%d maxlen:%d glob:%d quoted:%d escape:%d\n", | 2177 | fdprintf(2, "%s: list:%p n:%d string_start:%d length:%d maxlen:%d glob:%d quoted:%d escape:%d\n", |
| 2162 | prefix, list, n, string_start, o->length, o->maxlen, | 2178 | prefix, list, n, string_start, o->length, o->maxlen, |
| 2163 | !!(o->o_expflags & EXP_FLAG_GLOB), | 2179 | !!(o->o_expflags & EXP_FLAG_GLOB), |
| 2164 | o->has_quoted_part, | 2180 | o->has_quoted_part, |
| 2165 | !!(o->o_expflags & EXP_FLAG_ESC_GLOB_CHARS)); | 2181 | !!(o->o_expflags & EXP_FLAG_ESC_GLOB_CHARS)); |
| 2166 | while (i < n) { | 2182 | while (i < n) { |
| 2167 | indent(); | 2183 | indent(); |
| 2168 | fprintf(stderr, " list[%d]=%d '%s' %p\n", i, (int)list[i], | 2184 | fdprintf(2, " list[%d]=%d '%s' %p\n", i, (int)(uintptr_t)list[i], |
| 2169 | o->data + (int)list[i] + string_start, | 2185 | o->data + (int)(uintptr_t)list[i] + string_start, |
| 2170 | o->data + (int)list[i] + string_start); | 2186 | o->data + (int)(uintptr_t)list[i] + string_start); |
| 2171 | i++; | 2187 | i++; |
| 2172 | } | 2188 | } |
| 2173 | if (n) { | 2189 | if (n) { |
| 2174 | const char *p = o->data + (int)list[n - 1] + string_start; | 2190 | const char *p = o->data + (int)(uintptr_t)list[n - 1] + string_start; |
| 2175 | indent(); | 2191 | indent(); |
| 2176 | fprintf(stderr, " total_sz:%ld\n", (long)((p + strlen(p) + 1) - o->data)); | 2192 | fdprintf(2, " total_sz:%ld\n", (long)((p + strlen(p) + 1) - o->data)); |
| 2177 | } | 2193 | } |
| 2178 | } | 2194 | } |
| 2179 | #else | 2195 | #else |
| @@ -2672,18 +2688,18 @@ static void debug_print_tree(struct pipe *pi, int lvl) | |||
| 2672 | 2688 | ||
| 2673 | pin = 0; | 2689 | pin = 0; |
| 2674 | while (pi) { | 2690 | while (pi) { |
| 2675 | fprintf(stderr, "%*spipe %d res_word=%s followup=%d %s\n", lvl*2, "", | 2691 | fdprintf(2, "%*spipe %d res_word=%s followup=%d %s\n", lvl*2, "", |
| 2676 | pin, RES[pi->res_word], pi->followup, PIPE[pi->followup]); | 2692 | pin, RES[pi->res_word], pi->followup, PIPE[pi->followup]); |
| 2677 | prn = 0; | 2693 | prn = 0; |
| 2678 | while (prn < pi->num_cmds) { | 2694 | while (prn < pi->num_cmds) { |
| 2679 | struct command *command = &pi->cmds[prn]; | 2695 | struct command *command = &pi->cmds[prn]; |
| 2680 | char **argv = command->argv; | 2696 | char **argv = command->argv; |
| 2681 | 2697 | ||
| 2682 | fprintf(stderr, "%*s cmd %d assignment_cnt:%d", | 2698 | fdprintf(2, "%*s cmd %d assignment_cnt:%d", |
| 2683 | lvl*2, "", prn, | 2699 | lvl*2, "", prn, |
| 2684 | command->assignment_cnt); | 2700 | command->assignment_cnt); |
| 2685 | if (command->group) { | 2701 | if (command->group) { |
| 2686 | fprintf(stderr, " group %s: (argv=%p)%s%s\n", | 2702 | fdprintf(2, " group %s: (argv=%p)%s%s\n", |
| 2687 | CMDTYPE[command->cmd_type], | 2703 | CMDTYPE[command->cmd_type], |
| 2688 | argv | 2704 | argv |
| 2689 | # if !BB_MMU | 2705 | # if !BB_MMU |
| @@ -2697,10 +2713,10 @@ static void debug_print_tree(struct pipe *pi, int lvl) | |||
| 2697 | continue; | 2713 | continue; |
| 2698 | } | 2714 | } |
| 2699 | if (argv) while (*argv) { | 2715 | if (argv) while (*argv) { |
| 2700 | fprintf(stderr, " '%s'", *argv); | 2716 | fdprintf(2, " '%s'", *argv); |
| 2701 | argv++; | 2717 | argv++; |
| 2702 | } | 2718 | } |
| 2703 | fprintf(stderr, "\n"); | 2719 | fdprintf(2, "\n"); |
| 2704 | prn++; | 2720 | prn++; |
| 2705 | } | 2721 | } |
| 2706 | pi = pi->next; | 2722 | pi = pi->next; |
| @@ -4106,7 +4122,16 @@ static struct pipe *parse_stream(char **pstring, | |||
| 4106 | if (IS_NULL_CMD(ctx.command) | 4122 | if (IS_NULL_CMD(ctx.command) |
| 4107 | && dest.length == 0 && !dest.has_quoted_part | 4123 | && dest.length == 0 && !dest.has_quoted_part |
| 4108 | ) { | 4124 | ) { |
| 4109 | continue; | 4125 | /* This newline can be ignored. But... |
| 4126 | * without the below check, interactive shell | ||
| 4127 | * will ignore even lines with bare <newline>, | ||
| 4128 | * and show the continuation prompt: | ||
| 4129 | * ps1_prompt$ <enter> | ||
| 4130 | * ps2> _ <=== wrong prompt, should be ps1 | ||
| 4131 | */ | ||
| 4132 | struct pipe *pi = ctx.list_head; | ||
| 4133 | if (pi->num_cmds != 0) | ||
| 4134 | continue; | ||
| 4110 | } | 4135 | } |
| 4111 | /* Treat newline as a command separator. */ | 4136 | /* Treat newline as a command separator. */ |
| 4112 | done_pipe(&ctx, PIPE_SEQ); | 4137 | done_pipe(&ctx, PIPE_SEQ); |
| @@ -7445,7 +7470,7 @@ int hush_main(int argc, char **argv) | |||
| 7445 | unsigned builtin_argc; | 7470 | unsigned builtin_argc; |
| 7446 | char **e; | 7471 | char **e; |
| 7447 | struct variable *cur_var; | 7472 | struct variable *cur_var; |
| 7448 | struct variable shell_ver; | 7473 | struct variable *shell_ver; |
| 7449 | 7474 | ||
| 7450 | INIT_G(); | 7475 | INIT_G(); |
| 7451 | if (EXIT_SUCCESS) /* if EXIT_SUCCESS == 0, it is already done */ | 7476 | if (EXIT_SUCCESS) /* if EXIT_SUCCESS == 0, it is already done */ |
| @@ -7454,17 +7479,17 @@ int hush_main(int argc, char **argv) | |||
| 7454 | G.argv0_for_re_execing = argv[0]; | 7479 | G.argv0_for_re_execing = argv[0]; |
| 7455 | #endif | 7480 | #endif |
| 7456 | /* Deal with HUSH_VERSION */ | 7481 | /* Deal with HUSH_VERSION */ |
| 7457 | memset(&shell_ver, 0, sizeof(shell_ver)); | 7482 | shell_ver = xzalloc(sizeof(*shell_ver)); |
| 7458 | shell_ver.flg_export = 1; | 7483 | shell_ver->flg_export = 1; |
| 7459 | shell_ver.flg_read_only = 1; | 7484 | shell_ver->flg_read_only = 1; |
| 7460 | /* Code which handles ${var<op>...} needs writable values for all variables, | 7485 | /* Code which handles ${var<op>...} needs writable values for all variables, |
| 7461 | * therefore we xstrdup: */ | 7486 | * therefore we xstrdup: */ |
| 7462 | shell_ver.varstr = xstrdup(hush_version_str), | 7487 | shell_ver->varstr = xstrdup(hush_version_str); |
| 7463 | G.top_var = &shell_ver; | ||
| 7464 | /* Create shell local variables from the values | 7488 | /* Create shell local variables from the values |
| 7465 | * currently living in the environment */ | 7489 | * currently living in the environment */ |
| 7466 | debug_printf_env("unsetenv '%s'\n", "HUSH_VERSION"); | 7490 | debug_printf_env("unsetenv '%s'\n", "HUSH_VERSION"); |
| 7467 | unsetenv("HUSH_VERSION"); /* in case it exists in initial env */ | 7491 | unsetenv("HUSH_VERSION"); /* in case it exists in initial env */ |
| 7492 | G.top_var = shell_ver; | ||
| 7468 | cur_var = G.top_var; | 7493 | cur_var = G.top_var; |
| 7469 | e = environ; | 7494 | e = environ; |
| 7470 | if (e) while (*e) { | 7495 | if (e) while (*e) { |
| @@ -7479,8 +7504,8 @@ int hush_main(int argc, char **argv) | |||
| 7479 | e++; | 7504 | e++; |
| 7480 | } | 7505 | } |
| 7481 | /* (Re)insert HUSH_VERSION into env (AFTER we scanned the env!) */ | 7506 | /* (Re)insert HUSH_VERSION into env (AFTER we scanned the env!) */ |
| 7482 | debug_printf_env("putenv '%s'\n", shell_ver.varstr); | 7507 | debug_printf_env("putenv '%s'\n", shell_ver->varstr); |
| 7483 | putenv(shell_ver.varstr); | 7508 | putenv(shell_ver->varstr); |
| 7484 | 7509 | ||
| 7485 | /* Export PWD */ | 7510 | /* Export PWD */ |
| 7486 | set_pwd_var(/*exp:*/ 1); | 7511 | set_pwd_var(/*exp:*/ 1); |
| @@ -7840,18 +7865,6 @@ int hush_main(int argc, char **argv) | |||
| 7840 | parse_and_run_file(stdin); | 7865 | parse_and_run_file(stdin); |
| 7841 | 7866 | ||
| 7842 | final_return: | 7867 | final_return: |
| 7843 | #if ENABLE_FEATURE_CLEAN_UP | ||
| 7844 | if (G.cwd != bb_msg_unknown) | ||
| 7845 | free((char*)G.cwd); | ||
| 7846 | cur_var = G.top_var->next; | ||
| 7847 | while (cur_var) { | ||
| 7848 | struct variable *tmp = cur_var; | ||
| 7849 | if (!cur_var->max_len) | ||
| 7850 | free(cur_var->varstr); | ||
| 7851 | cur_var = cur_var->next; | ||
| 7852 | free(tmp); | ||
| 7853 | } | ||
| 7854 | #endif | ||
| 7855 | hush_exit(G.last_exitcode); | 7868 | hush_exit(G.last_exitcode); |
| 7856 | } | 7869 | } |
| 7857 | 7870 | ||
diff --git a/util-linux/mkswap.c b/util-linux/mkswap.c index 53537fcd9..2e9662b2b 100644 --- a/util-linux/mkswap.c +++ b/util-linux/mkswap.c | |||
| @@ -15,7 +15,7 @@ static void mkswap_selinux_setcontext(int fd, const char *path) | |||
| 15 | if (!is_selinux_enabled()) | 15 | if (!is_selinux_enabled()) |
| 16 | return; | 16 | return; |
| 17 | 17 | ||
| 18 | xfstat(fd, &stbuf, argv[0]); | 18 | xfstat(fd, &stbuf, path); |
| 19 | if (S_ISREG(stbuf.st_mode)) { | 19 | if (S_ISREG(stbuf.st_mode)) { |
| 20 | security_context_t newcon; | 20 | security_context_t newcon; |
| 21 | security_context_t oldcon = NULL; | 21 | security_context_t oldcon = NULL; |
