Commit 22977b7c authored by Nick Mathewson's avatar Nick Mathewson 🦞
Browse files

Expose format_hex_number_..., and rename it to ..._sigsafe().

There are some other places in the code that will want a signal-safe
way to format numbers, so it shouldn't be static to util.c.
parent 449b2b7c
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -3402,9 +3402,8 @@ tor_join_win_cmdline(const char *argv[])
 * function; it's designed to be used in code paths where you can't call
 * arbitrary C functions.
 */
STATIC int
format_hex_number_for_helper_exit_status(unsigned int x, char *buf,
                                         int max_len)
int
format_hex_number_sigsafe(unsigned int x, char *buf, int max_len)
{
  int len;
  unsigned int tmp;
@@ -3490,8 +3489,8 @@ format_helper_exit_status(unsigned char child_state, int saved_errno,
  cur = hex_errno;

  /* Emit child_state */
  written = format_hex_number_for_helper_exit_status(child_state,
                                                     cur, left);
  written = format_hex_number_sigsafe(child_state, cur, left);

  if (written <= 0)
    goto err;

@@ -3520,8 +3519,7 @@ format_helper_exit_status(unsigned char child_state, int saved_errno,
  }

  /* Emit unsigned_errno */
  written = format_hex_number_for_helper_exit_status(unsigned_errno,
                                                     cur, left);
  written = format_hex_number_sigsafe(unsigned_errno, cur, left);

  if (written <= 0)
    goto err;
+5 −2
Original line number Diff line number Diff line
@@ -518,11 +518,12 @@ int32_t tor_weak_random_range(tor_weak_rng_t *rng, int32_t top);
 * <b>n</b> */
#define tor_weak_random_one_in_n(rng, n) (0==tor_weak_random_range((rng),(n)))

int format_hex_number_sigsafe(unsigned int x, char *buf, int max_len);

#ifdef UTIL_PRIVATE
/* Prototypes for private functions only used by util.c (and unit tests) */

STATIC int format_hex_number_for_helper_exit_status(unsigned int x, char *buf,
                                             int max_len);
#ifndef _WIN32
STATIC int format_helper_exit_status(unsigned char child_state,
                              int saved_errno, char *hex_errno);

@@ -532,6 +533,8 @@ STATIC int format_helper_exit_status(unsigned char child_state,
                        1 + sizeof(int) * 2 + 1)
#endif

#endif

const char *libor_get_digests(void);

#endif
+2 −3
Original line number Diff line number Diff line
@@ -2627,7 +2627,7 @@ test_util_spawn_background_partial_read(void *ptr)
}

/**
 * Test for format_hex_number_for_helper_exit_status()
 * Test for format_hex_number_sigsafe()
 */

static void
@@ -2653,8 +2653,7 @@ test_util_format_hex_number(void *ptr)
  (void)ptr;

  for (i = 0; test_data[i].str != NULL; ++i) {
    len = format_hex_number_for_helper_exit_status(test_data[i].x,
        buf, HEX_ERRNO_SIZE);
    len = format_hex_number_sigsafe(test_data[i].x, buf, HEX_ERRNO_SIZE);
    test_neq(len, 0);
    buf[len] = '\0';
    test_streq(buf, test_data[i].str);