int fswc_getopt_file(fswc_getopt_t *s) { char line[1024]; char *arg, *val; struct option *opt; while(fgets(line, 1024, s->f)) { s->line++; strtrim(line, WHITESPACE); arg = argdup(line, WHITESPACE, 0, 0); if(!arg) continue; if(*arg == '#') continue; /* Find argument in the list. */ opt = (struct option *) s->long_opts; while(opt->name) { if(!strcasecmp(opt->name, arg)) break; opt++; } if(!opt->name) { ERROR("Unknown argument: %s", arg); WARN("%s,%i: %s", s->filename, s->line, line); free(arg); return(-2); } if(opt->val == 'c') { ERROR("You can't use config from a configuration file."); WARN("%s,%i: %s", s->filename, s->line, line); free(arg); return(-2); } if(opt->has_arg) { val = argdup(line, WHITESPACE, 1, 0); optarg = val; } free(arg); return(opt->val); } /* Have we reached the end of the file? */ if(feof(s->f)) return(-1); /* No.. there has been an error. */ ERROR("fread: %s", strerror(errno)); return(-2); }
int fswc_openlog(fswebcam_config_t *config) { char *s; int r; /* Get the first part of the filename. */ s = argdup(config->logfile, ":", 0, 0); if(!s) { ERROR("Out of memory."); return(-1); } if(!strcasecmp(s, "file")) { free(s); s = argdup(config->logfile, ":", 1, 0); if(!s) { ERROR("No log file was specified."); return(-1); } } else if(!strcasecmp(s, "syslog")) { free(s); log_syslog(1); return(0); } r = log_open(s); free(s); return(r); }
long argtol(char *src, char *sep, int arg, int opt, int base) { char *str; long val; str = argdup(src, sep, arg, opt); if(!str) return(-1); /* Catch any errors. */ errno = 0; val = strtol(str, NULL, base); if(errno) val = -1; free(str); return(val); }