crondlog(const char *ctl, ...)
{
va_list va;
+ const char *fmt;
int level = (int)(ctl[0] & 0xf);
int type = level == 20 ?
LOG_ERR : ((ctl[0] & 0100) ? LOG_WARNING : LOG_NOTICE);
va_start(va, ctl);
+ fmt = ctl+1;
if (level >= LogLevel) {
#ifdef FEATURE_DEBUG_OPT
- if (DebugOpt) vfprintf(stderr, ctl, va);
+ if (DebugOpt) vfprintf(stderr, fmt, va);
else
#endif
- if (LogFile == 0) vsyslog(type, ctl, va);
+ if (LogFile == 0) vsyslog(type, fmt, va);
else {
int logfd;
if ((logfd = open(LogFile, O_WRONLY|O_CREAT|O_APPEND, 600)) >= 0) {
- vdprintf(logfd, ctl, va);
+ vdprintf(logfd, fmt, va);
close(logfd);
#ifdef FEATURE_DEBUG_OPT
} else {
int st;
col = 0;
- st = WEXITSTATUS(status);
if (!WIFEXITED(status)) {
- st = WTERMSIG(status);
#if JOBS
if (WIFSTOPPED(status))
st = WSTOPSIG(status);
+ else
#endif
+ st = WTERMSIG(status);
if (sigonly) {
- if (st == SIGINT || st == SIGPIPE)
+ if(st == SIGPIPE) {
+ col = fmtstr(s, 16, "Broken pipe");
+ goto out;
+ }
+ if (st == SIGINT)
goto out;
+#if JOBS
if (WIFSTOPPED(status))
goto out;
+#endif
}
st &= 0x7f;
col = fmtstr(s, 32, u_signal_names(NULL, &st, 0));
col += fmtstr(s + col, 16, " (core dumped)");
}
} else if (!sigonly) {
+ st = WEXITSTATUS(status);
if (st)
col = fmtstr(s, 16, "Done(%d)", st);
else
char c = '?';
int done = 0;
int err = 0;
- char s[10];
- char **optnext = optfirst + *param_optind - 1;
+ char s[12];
+ char **optnext;
+
+ if(*param_optind < 1)
+ return 1;
+ optnext = optfirst + *param_optind - 1;
- if (*param_optind <= 1 || *optoff < 0 || !(*(optnext - 1)) ||
- strlen(*(optnext - 1)) < *optoff)
+ if (*param_optind <= 1 || *optoff < 0 || strlen(optnext[-1]) < *optoff)
p = NULL;
else
- p = *(optnext - 1) + *optoff;
+ p = optnext[-1] + *optoff;
if (p == NULL || *p == '\0') {
/* Current word is done, advance */
- if (optnext == NULL)
- return 1;
p = *optnext;
if (p == NULL || *p != '-' || *++p == '\0') {
atend: