Get rid of long longs in the the hush code (but not yet in the libraries)

This commit is contained in:
Stephen Heumann 2014-10-27 14:09:00 -05:00
parent 16c89af688
commit 6c2c9d8865
2 changed files with 15 additions and 8 deletions

View File

@ -544,4 +544,11 @@ extern int vasprintf(char **string_ptr, const char *format, va_list p) FAST_FUNC
extern ssize_t getline(char **lineptr, size_t *n, FILE *stream) FAST_FUNC; extern ssize_t getline(char **lineptr, size_t *n, FILE *stream) FAST_FUNC;
#endif #endif
#if NSIG <= 32
typedef unsigned long sigmask_t;
#else
typedef unsigned long long sigmask_t;
#endif
#endif #endif

View File

@ -5146,7 +5146,7 @@ static NOINLINE const char *expand_one_var(char **to_be_freed_pp, char *arg, cha
beg = expand_and_evaluate_arith(exp_word, &errmsg); beg = expand_and_evaluate_arith(exp_word, &errmsg);
if (errmsg) if (errmsg)
goto arith_err; goto arith_err;
debug_printf_varexp("beg:'%s'=%lld\n", exp_word, (long long)beg); debug_printf_varexp("beg:'%s'=%" PRIdMAX "\n", exp_word, (intmax_t)beg);
*p++ = SPECIAL_VAR_SYMBOL; *p++ = SPECIAL_VAR_SYMBOL;
exp_word = p; exp_word = p;
p = strchr(p, SPECIAL_VAR_SYMBOL); p = strchr(p, SPECIAL_VAR_SYMBOL);
@ -5154,7 +5154,7 @@ static NOINLINE const char *expand_one_var(char **to_be_freed_pp, char *arg, cha
len = expand_and_evaluate_arith(exp_word, &errmsg); len = expand_and_evaluate_arith(exp_word, &errmsg);
if (errmsg) if (errmsg)
goto arith_err; goto arith_err;
debug_printf_varexp("len:'%s'=%lld\n", exp_word, (long long)len); debug_printf_varexp("len:'%s'=%" PRIdMAX "\n", exp_word, (intmax_t)len);
if (len >= 0) { /* bash compat: len < 0 is illegal */ if (len >= 0) { /* bash compat: len < 0 is illegal */
if (beg < 0) /* bash compat */ if (beg < 0) /* bash compat */
beg = 0; beg = 0;
@ -5627,9 +5627,9 @@ static void re_execute_shell(char ***to_free, const char *s,
char *g_argv0, char **g_argv, char *g_argv0, char **g_argv,
char **builtin_argv) char **builtin_argv)
{ {
# define NOMMU_HACK_FMT ("-$%x:%x:%x:%x:%x:%llx" IF_HUSH_LOOPS(":%x")) # define NOMMU_HACK_FMT ("-$%x:%x:%x:%x:%x:%" PRIxMAX IF_HUSH_LOOPS(":%x"))
/* delims + 2 * (number of bytes in printed hex numbers) */ /* delims + 2 * (number of bytes in printed hex numbers) */
char param_buf[sizeof(NOMMU_HACK_FMT) + 2 * (sizeof(int)*6 + sizeof(long long)*1)]; char param_buf[sizeof(NOMMU_HACK_FMT) + 2 * (sizeof(int)*6 + sizeof(uintmax_t)*1)];
char *heredoc_argv[4]; char *heredoc_argv[4];
struct variable *cur; struct variable *cur;
# if ENABLE_HUSH_FUNCTIONS # if ENABLE_HUSH_FUNCTIONS
@ -5637,7 +5637,7 @@ static void re_execute_shell(char ***to_free, const char *s,
# endif # endif
char **argv, **pp; char **argv, **pp;
unsigned cnt; unsigned cnt;
unsigned long long empty_trap_mask; sigmask_t empty_trap_mask;
if (!g_argv0) { /* heredoc */ if (!g_argv0) { /* heredoc */
argv = heredoc_argv; argv = heredoc_argv;
@ -5659,7 +5659,7 @@ static void re_execute_shell(char ***to_free, const char *s,
int sig; int sig;
for (sig = 1; sig < NSIG; sig++) { for (sig = 1; sig < NSIG; sig++) {
if (G.traps[sig] && !G.traps[sig][0]) if (G.traps[sig] && !G.traps[sig][0])
empty_trap_mask |= 1LL << sig; empty_trap_mask |= ((uintmax_t)1) << sig;
} }
} }
@ -7996,7 +7996,7 @@ int hush_main(int argc, char **argv)
full_write1_str(optarg); full_write1_str(optarg);
_exit(0); _exit(0);
case '$': { case '$': {
unsigned long long empty_trap_mask; sigmask_t empty_trap_mask;
G.root_pid = bb_strtou(optarg, &optarg, 16); G.root_pid = bb_strtou(optarg, &optarg, 16);
optarg++; optarg++;
@ -8014,7 +8014,7 @@ int hush_main(int argc, char **argv)
install_special_sighandlers(); install_special_sighandlers();
G.traps = xzalloc(sizeof(G.traps[0]) * NSIG); G.traps = xzalloc(sizeof(G.traps[0]) * NSIG);
for (sig = 1; sig < NSIG; sig++) { for (sig = 1; sig < NSIG; sig++) {
if (empty_trap_mask & (1LL << sig)) { if (empty_trap_mask & (((uintmax_t)1) << sig)) {
G.traps[sig] = xzalloc(1); /* == xstrdup(""); */ G.traps[sig] = xzalloc(1); /* == xstrdup(""); */
install_sighandler(sig, SIG_IGN); install_sighandler(sig, SIG_IGN);
} }