void udev_config_init(void) { const char* env; strcpy(udev_root, UDEV_ROOT); strcpy(udev_config_filename, UDEV_CONFIG_FILE); strcpy(udev_rules_dir, UDEV_RULES_DIR); udev_log_priority = LOG_ERR; udev_run = 1; /* disable RUN key execution */ env = getenv("UDEV_RUN"); if (env && !string_is_true(env)) { udev_run = 0; } env = getenv("UDEV_CONFIG_FILE"); if (env) { strlcpy(udev_config_filename, env, sizeof(udev_config_filename)); remove_trailing_chars(udev_config_filename, '/'); } parse_config_file(); env = getenv("UDEV_ROOT"); if (env) { strlcpy(udev_root, env, sizeof(udev_root)); remove_trailing_chars(udev_root, '/'); } env = getenv("UDEV_LOG"); if (env) { udev_log_priority = log_priority(env); } dbg("UDEV_CONFIG_FILE='%s'", udev_config_filename); dbg("udev_root='%s'", udev_root); dbg("udev_rules='%s'", udev_rules_dir); dbg("udev_log=%d", udev_log_priority); }
/** * teamdctl_alloc: * * Allocates library context and does initial setup. * * Returns: new libteam library context **/ TEAMDCTL_EXPORT struct teamdctl *teamdctl_alloc(void) { struct teamdctl *tdc; const char *env; tdc = myzalloc(sizeof(*tdc)); if (!tdc) return NULL; tdc->log_fn = log_stderr; tdc->log_priority = LOG_ERR; /* environment overwrites config */ env = getenv("TEAMDCTL_LOG"); if (env != NULL) teamdctl_set_log_priority(tdc, log_priority(env)); dbg(tdc, "teamdctl %p created.", tdc); dbg(tdc, "log_priority=%d", tdc->log_priority); return tdc; }
void log_message (int priority, const char *format, ...) { va_list args; static int udev_log = -1; if (udev_log == -1) { const char *value; value = getenv("UDEV_LOG"); if (value) udev_log = log_priority(value); else udev_log = LOG_ERR; } if (priority > udev_log) return; va_start(args, format); vsyslog(priority, format, args); va_end(args); }
int optimsoc_log_new(struct optimsoc_log_ctx **ctx) { const char *env; struct optimsoc_log_ctx *c; c = calloc(1, sizeof(struct optimsoc_log_ctx)); if (!c) return -ENOMEM; c->log_fn = log_stderr; c->log_priority = LOG_ERR; /* environment overwrites config */ env = getenv("OPTIMSOC_LOG"); if (env != NULL) { c->log_priority = log_priority(env); } *ctx = c; dbg(c, "log_priority=%d\n", c->log_priority); return 0; }
static int parse_config_file(void) { char line[LINE_SIZE]; char* bufline; char* linepos; char* variable; char* value; char* buf; size_t bufsize; size_t cur; size_t count; int lineno; int retval = 0; if (file_map(udev_config_filename, &buf, &bufsize) != 0) { err("can't open '%s' as config file: %s", udev_config_filename, strerror(errno)); return -ENODEV; } /* loop through the whole file */ lineno = 0; cur = 0; while (cur < bufsize) { count = buf_get_line(buf, bufsize, cur); bufline = &buf[cur]; cur += count + 1; lineno++; if (count >= sizeof(line)) { err("line too long, conf line skipped %s, line %d", udev_config_filename, lineno); continue; } /* eat the whitespace */ while ((count > 0) && isspace(bufline[0])) { bufline++; count--; } if (count == 0) { continue; } /* see if this is a comment */ if (bufline[0] == COMMENT_CHARACTER) { continue; } memcpy(line, bufline, count); line[count] = '\0'; linepos = line; retval = get_key(&linepos, &variable, &value); if (retval != 0) { err("error parsing %s, line %d:%d", udev_config_filename, lineno, (int)(linepos - line)); continue; } if (strcasecmp(variable, "udev_root") == 0) { strlcpy(udev_root, value, sizeof(udev_root)); remove_trailing_chars(udev_root, '/'); continue; } if (strcasecmp(variable, "udev_rules") == 0) { strlcpy(udev_rules_dir, value, sizeof(udev_rules_dir)); remove_trailing_chars(udev_rules_dir, '/'); continue; } if (strcasecmp(variable, "udev_log") == 0) { udev_log_priority = log_priority(value); continue; } } file_unmap(buf, bufsize); return retval; }