static void gotsig(int sig UNUSED_PARAM) { /* bb_putchar_stderr doesn't use stdio buffering, * therefore it is safe in signal handler */ bb_putchar_stderr('\n'); setTermSettings(cin_fileno, &initial_settings); _exit(EXIT_FAILURE); }
static void tftp_progress_done(void) { if (is_bb_progress_inited(&G.pmt)) { tftp_progress_update(); bb_putchar_stderr('\n'); bb_progress_free(&G.pmt); } }
static void tftp_progress_done(void) { if (G.pmt.inited) { tftp_progress_update(); bb_putchar_stderr('\n'); G.pmt.inited = 0; } }
static void progress_meter(int flag) { if (option_mask32 & WGET_OPT_QUIET) return; if (flag == PROGRESS_START) bb_progress_init(&G.pmt); bb_progress_update(&G.pmt, G.curfile, G.beg_range, G.transferred, G.chunked ? 0 : G.beg_range + G.transferred + G.content_len); if (flag == PROGRESS_END) { bb_putchar_stderr('\n'); G.transferred = 0; } }
/* SIGALRM logic nicked from the wget applet */ static void progress_meter(int flag) { /* We can be called from signal handler */ int save_errno = errno; if (flag == -1) { /* first call to progress_meter */ bb_progress_init(&G.pmt); } bb_progress_update(&G.pmt, G.file, 0, G.pos, G.size); if (flag == 0) { /* last call to progress_meter */ alarm(0); bb_putchar_stderr('\n'); } else { if (flag == -1) { /* first call to progress_meter */ signal_SA_RESTART_empty_mask(SIGALRM, progress_meter); } alarm(1); } errno = save_errno; }
static void ParseField(char *user, char *ary, int modvalue, int off, const char *names, char *ptr) /* 'names' is a pointer to a set of 3-char abbreviations */ { char *base = ptr; int n1 = -1; int n2 = -1; // this can't happen due to config_read() /*if (base == NULL) return;*/ while (1) { int skip = 0; /* Handle numeric digit or symbol or '*' */ if (*ptr == '*') { n1 = 0; /* everything will be filled */ n2 = modvalue - 1; skip = 1; ++ptr; } else if (isdigit(*ptr)) { char *endp; if (n1 < 0) { n1 = strtol(ptr, &endp, 10) + off; } else { n2 = strtol(ptr, &endp, 10) + off; } ptr = endp; /* gcc likes temp var for &endp */ skip = 1; } else if (names) { int i; for (i = 0; names[i]; i += 3) { /* was using strncmp before... */ if (strncasecmp(ptr, &names[i], 3) == 0) { ptr += 3; if (n1 < 0) { n1 = i / 3; } else { n2 = i / 3; } skip = 1; break; } } } /* handle optional range '-' */ if (skip == 0) { goto err; } if (*ptr == '-' && n2 < 0) { ++ptr; continue; } /* * collapse single-value ranges, handle skipmark, and fill * in the character array appropriately. */ if (n2 < 0) { n2 = n1; } if (*ptr == '/') { char *endp; skip = strtol(ptr + 1, &endp, 10); ptr = endp; /* gcc likes temp var for &endp */ } /* * fill array, using a failsafe is the easiest way to prevent * an endless loop */ { int s0 = 1; int failsafe = 1024; --n1; do { n1 = (n1 + 1) % modvalue; if (--s0 == 0) { ary[n1 % modvalue] = 1; s0 = skip; } if (--failsafe == 0) { goto err; } } while (n1 != n2); } if (*ptr != ',') { break; } ++ptr; n1 = -1; n2 = -1; } if (*ptr) { err: bb_error_msg("user %s: parse error at %s", user, base); return; } /* can't use log5 (it inserts newlines), open-coding it */ if (G.log_level <= 5 && logmode != LOGMODE_SYSLOG) { int i; for (i = 0; i < modvalue; ++i) fprintf(stderr, "%d", (unsigned char)ary[i]); bb_putchar_stderr('\n'); } }