int find_devs(struct jlhead *l, const char *base) { DIR *d; char fn[512]; struct dirent *ent; struct stat buf; d = opendir(base); if(!d) return 0; while((ent = readdir(d))) { if(ent->d_name[0] == '.') continue; sprintf(fn ,"%s/%s", base, ent->d_name); if(!strcmp(ent->d_name, "dev")) { jl_append(l, strdup(fn)); } else { if(strpfx(ent->d_name, "usbdev")) if(lstat(fn, &buf)==0) { if(S_ISDIR(buf.st_mode)) find_devs(l, fn); } } } closedir(d); return 0; }
mod_export void match_highlight(const char *teststr, int *on_var) { int found = 1; *on_var = 0; while (found && *teststr) { const struct highlight *hl; found = 0; if (strpfx("fg=", teststr) || strpfx("bg=", teststr)) { int is_fg = (teststr[0] == 'f'), atr; teststr += 3; atr = match_colour(&teststr, is_fg, 0); if (*teststr == ',') teststr++; else if (*teststr) break; found = 1; /* skip out of range colours but keep scanning attributes */ if (atr >= 0) *on_var |= atr; } else { for (hl = highlights; hl->name; hl++) { if (strpfx(hl->name, teststr)) { const char *val = teststr + strlen(hl->name); if (*val == ',') val++; else if (*val) break; *on_var |= hl->mask_on; *on_var &= ~hl->mask_off; teststr = val; found = 1; } } } } }
static void scancompcmd(HashNode hn, UNUSED(int flags)) { int l; Thingy t = (Thingy) hn; if(strpfx(namedcmdstr, t->nam)) { addlinknode(namedcmdll, t->nam); l = pfxlen(peekfirst(namedcmdll), t->nam); if (l < namedcmdambig) namedcmdambig = l; } }
/** * Described in header. */ bool path_absolute(const char *path) { if (!path) { return FALSE; } #ifdef WIN32 if (strpfx(path, "\\\\")) { /* UNC */ return TRUE; } if (strlen(path) && isalpha(path[0]) && path[1] == ':') { /* drive letter */ return TRUE; } #else /* !WIN32 */ if (path[0] == DIRECTORY_SEPARATOR[0]) { return TRUE; } #endif return FALSE; }
mod_export void allocate_colour_buffer(void) { char **atrs; int lenfg, lenbg, len; if (colseq_buf_allocs++) return; atrs = getaparam("zle_highlight"); if (atrs) { for (; *atrs; atrs++) { if (strpfx("fg_start_code:", *atrs)) { set_colour_code(*atrs + 14, &fg_bg_sequences[COL_SEQ_FG].start); } else if (strpfx("fg_default_code:", *atrs)) { set_colour_code(*atrs + 16, &fg_bg_sequences[COL_SEQ_FG].def); } else if (strpfx("fg_end_code:", *atrs)) { set_colour_code(*atrs + 12, &fg_bg_sequences[COL_SEQ_FG].end); } else if (strpfx("bg_start_code:", *atrs)) { set_colour_code(*atrs + 14, &fg_bg_sequences[COL_SEQ_BG].start); } else if (strpfx("bg_default_code:", *atrs)) { set_colour_code(*atrs + 16, &fg_bg_sequences[COL_SEQ_BG].def); } else if (strpfx("bg_end_code:", *atrs)) { set_colour_code(*atrs + 12, &fg_bg_sequences[COL_SEQ_BG].end); } } } lenfg = strlen(fg_bg_sequences[COL_SEQ_FG].def); /* always need 1 character for non-default code */ if (lenfg < 1) lenfg = 1; lenfg += strlen(fg_bg_sequences[COL_SEQ_FG].start) + strlen(fg_bg_sequences[COL_SEQ_FG].end); lenbg = strlen(fg_bg_sequences[COL_SEQ_BG].def); /* always need 1 character for non-default code */ if (lenbg < 1) lenbg = 1; lenbg += strlen(fg_bg_sequences[COL_SEQ_BG].start) + strlen(fg_bg_sequences[COL_SEQ_BG].end); len = lenfg > lenbg ? lenfg : lenbg; colseq_buf = (char *)zalloc(len+1); }
/** * Parse commandline arguments. * Return True on success or False if an unrecognized option has been * specified. */ int parseArgs(int argc, char **argv) { int i; Bool ok; unsigned present; ok = True; addToList(&inclPath, "."); addToList(&inclPath, DFLT_XKB_CONFIG_ROOT); for (i = 1; (i < argc) && ok; i++) { if (argv[i][0] != '-') { /* Allow a call like "setxkbmap us" to work. Layout is default, if -layout is given, then try parsing variant, then options */ if (!settings.layout.src) trySetString(&settings.layout, argv[i], FROM_CMD_LINE); else if (!settings.variant.src) trySetString(&settings.variant, argv[i], FROM_CMD_LINE); else ok = addToList(&options, argv[i]); } else if (streq(argv[i], "-compat")) ok = setOptString(&i, argc, argv, &settings.compat, FROM_CMD_LINE); else if (streq(argv[i], "-config")) ok = setOptString(&i, argc, argv, &settings.config, FROM_CMD_LINE); else if (streq(argv[i], "-device")) { if ( ++i < argc ) { deviceSpec = atoi(argv[i]); /* only allow device IDs, not names */ } else { usage(argc, argv); exit(-1); } } else if (streq(argv[i], "-display")) ok = setOptString(&i, argc, argv, &settings.display, FROM_CMD_LINE); else if (streq(argv[i], "-geometry")) ok = setOptString(&i, argc, argv, &settings.geometry, FROM_CMD_LINE); else if (streq(argv[i], "-help") || streq(argv[i], "-?")) { usage(argc, argv); exit(0); } else if (streq(argv[i], "-I")) /* space between -I and path */ { if ( ++i < argc ) ok = addToList(&inclPath, argv[i]); else VMSG(0, "No directory specified on the command line\n" "Trailing -I option ignored\n"); } else if (strpfx(argv[i], "-I")) /* no space between -I and path */ ok = addToList(&inclPath, &argv[i][2]); else if (streq(argv[i], "-keycodes")) ok = setOptString(&i, argc, argv, &settings.keycodes, FROM_CMD_LINE); else if (streq(argv[i], "-keymap")) ok = setOptString(&i, argc, argv, &settings.keymap, FROM_CMD_LINE); else if (streq(argv[i], "-layout")) ok = setOptString(&i, argc, argv, &settings.layout, FROM_CMD_LINE); else if (streq(argv[i], "-model")) ok = setOptString(&i, argc, argv, &settings.model, FROM_CMD_LINE); else if (streq(argv[i], "-option")) { if ((i == argc - 1) || (argv[i + 1][0] == '\0') || (argv[i + 1][0] == '-')) { clearOptions = True; ok = addToList(&options, ""); if (i < argc - 1 && argv[i + 1][0] == '\0') i++; } else { ok = addToList(&options, argv[++i]); } } else if (streq(argv[i], "-print")) print = True; else if (streq(argv[i], "-query")) query = True; else if (streq(argv[i], "-rules")) ok = setOptString(&i, argc, argv, &settings.rules, FROM_CMD_LINE); else if (streq(argv[i], "-symbols")) ok = setOptString(&i, argc, argv, &settings.symbols, FROM_CMD_LINE); else if (streq(argv[i], "-synch")) synch = True; else if (streq(argv[i], "-types")) ok = setOptString(&i, argc, argv, &settings.types, FROM_CMD_LINE); else if (streq(argv[i], "-verbose") || (streq(argv[i], "-v"))) { if ((i < argc - 1) && (isdigit(argv[i + 1][0]))) verbose = atoi(argv[++i]); else verbose++; if (verbose < 0) { ERR1("Illegal verbose level %d. Reset to 0\n", verbose); verbose = 0; } else if (verbose > 10) { ERR1("Illegal verbose level %d. Reset to 10\n", verbose); verbose = 10; } VMSG1(7, "Setting verbose level to %d\n", verbose); } else if (streq(argv[i], "-variant")) ok = setOptString(&i, argc, argv, &settings.variant, FROM_CMD_LINE); else { ERR1("Error! Option \"%s\" not recognized\n", argv[i]); ok = False; } } present = 0; if (settings.types.value) present++; if (settings.compat.value) present++; if (settings.symbols.value) present++; if (settings.keycodes.value) present++; if (settings.geometry.value) present++; if (settings.config.value) present++; if (settings.model.value) present++; if (settings.layout.value) present++; if (settings.variant.value) present++; if (settings.keymap.value && present) { ERR("No other components can be specified when a keymap is present\n"); return False; } return ok; }
static bool get_next_test_vector(test_vector_t *test) { param_t param = PARAM_UNKNOWN; char line[512]; memset(test, 0, sizeof(test_vector_t)); while (fgets(line, sizeof(line), ctx.in)) { enumerator_t *enumerator; chunk_t value = chunk_empty; char *token; int i; switch (line[0]) { case '\n': case '\r': case '#': case '\0': /* copy comments, empty lines etc. directly to the output */ if (param != PARAM_UNKNOWN) { /* seems we got a complete test vector */ return TRUE; } fputs(line, ctx.out); continue; case '[': /* control directives */ fputs(line, ctx.out); if (strpfx(line, "[ENCRYPT]")) { ctx.decrypt = FALSE; } else if (strpfx(line, "[DECRYPT]")) { ctx.decrypt = TRUE; } else if (strcasepfx(line, "[IVlen = ")) { ctx.ivlen = atoi(line + strlen("[IVlen = ")); } else if (strcasepfx(line, "[Taglen = ")) { ctx.icvlen = atoi(line + strlen("[Taglen = ")); } continue; default: /* we assume the rest of the lines are PARAM = VALUE pairs*/ fputs(line, ctx.out); break; } i = 0; enumerator = enumerator_create_token(line, "=", " \n\r"); while (enumerator->enumerate(enumerator, &token)) { switch (i++) { case 0: /* PARAM */ param = parse_parameter(token); continue; case 1: /* VALUE */ if (param != PARAM_UNKNOWN && param != PARAM_COUNT) { value = chunk_from_hex(chunk_from_str(token), NULL); } else { value = chunk_empty; } continue; default: break; } break; } enumerator->destroy(enumerator); if (i < 2) { value = chunk_empty; } switch (param) { case PARAM_KEY: test->key = value; break; case PARAM_IV: test->iv = value; test->external_iv = TRUE; break; case PARAM_PLAINTEXT: test->plain = value; break; case PARAM_CIPHERTEXT: test->cipher = value; break; case PARAM_AAD: test->aad = value; break; case PARAM_ICV: test->icv = value; break; default: chunk_free(&value); break; } } if (param != PARAM_UNKNOWN) { /* could be that the file ended with a complete test vector */ return TRUE; } return FALSE; }
int main(int argc, char *argv[]) { struct sockaddr_nl nls; struct pollfd pfd; char *p, buf[1024]; struct dev dev; int err=0; conf.devdir = "/dev"; conf.sysdir = "/sys"; if(jelopt(argv, 'h', "help", NULL, NULL)) { printf("usbdev-populate [-hd]\n" " Version 1.2 By Jens Låås, UU 2009.\n" " -d --daemonize\n" " --debug\n" " -v --verbose\n" " --sysdir DIR\n" " --devdir DIR\n"); exit(0); } if(jelopt(argv, 0, "sysdir", &conf.sysdir, &err)) ; if(jelopt(argv, 0, "devdir", &conf.devdir, &err)) ; if(jelopt(argv, 'd', "daemonize", NULL, &err)) conf.daemonize = 1; if(jelopt(argv, 'v', "verbose", NULL, &err)) conf.verbose = 1; if(jelopt(argv, 0, "debug", NULL, &err)) conf.verbose = conf.debug = 1; // mount local sysfs sysfs_mount(); memset(&nls,0,sizeof(struct sockaddr_nl)); nls.nl_family = AF_NETLINK; nls.nl_pid = getpid(); nls.nl_groups = -1; pfd.events = POLLIN; pfd.fd = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); if (pfd.fd==-1) die("Not root\n"); if (bind(pfd.fd, (void *)&nls, sizeof(struct sockaddr_nl))) die("Bind failed\n"); /* daemonize */ if(conf.daemonize && !conf.debug) daemonize(); /* Check/Create nodes in /sys/block */ sysusb_scan(); if(!conf.daemonize) exit(0); while (-1!=poll(&pfd, 1, -1)) { int i, len = recv(pfd.fd, buf, sizeof(buf)-1, MSG_DONTWAIT); if (len == -1) die("recv\n"); buf[len] = 0; memset(&dev,0,sizeof(dev)); i = 0; while (i<len) { //if(conf.debug) printf("MSG=%s\n", buf+i); if((p=strpfx(buf+i, "SUBSYSTEM="))) dev.subsystem = strdup(p); if((p=strpfx(buf+i, "MAJOR="))) dev.major = atoi(p); if((p=strpfx(buf+i, "MINOR="))) dev.minor = atoi(p); if((p=strpfx(buf+i, "DEVNAME="))) dev.name = strdup(p); /* DEVNAME=bus/usb/001/011 */ if(strpfx(buf+i, "ACTION=add")) dev.action = 1; i += strlen(buf+i)+1; } if(dev.action == 1 && dev.name && *dev.name != '/') { if(!strcmp(dev.subsystem, "usb")) { struct stat statbuf; int rc; if(conf.verbose) printf("Event %s device %s %d,%d\n", dev.subsystem, dev.name, dev.major, dev.minor); sprintf(buf, "%s/%s", conf.devdir, dev.name); if((rc=stat(buf, &statbuf))|| !dev_match(&statbuf, &dev)) { if(rc==0) unlink(buf); if(conf.verbose) printf("Add %s device %s\n", dev.subsystem, dev.name); if(mknod(buf, 0640|S_IFCHR, makedev(dev.major, dev.minor))) { if(conf.debug) printf("mknod(%s) failed\n", dev.name); } } } } } die("poll\n"); return 0; }
/** * Parse commandline arguments. * Return True on success or False if an unrecognized option has been * specified. */ int parseArgs(int argc, char **argv) { int i; Bool ok; unsigned present; ok = True; addToList(&szInclPath, &numInclPath, &inclPath, "."); addToList(&szInclPath, &numInclPath, &inclPath, DFLT_XKB_CONFIG_ROOT); for (i = 1; (i < argc) && ok; i++) { if (argv[i][0] != '-') { /* Allow a call like "setxkbmap us" to work. Layout is default, if -layout is given, then try parsing variant, then options */ if (!svSrc[LAYOUT_NDX]) trySetString(LAYOUT_NDX, argv[i], FROM_CMD_LINE); else if (!svSrc[VARIANT_NDX]) trySetString(VARIANT_NDX, argv[i], FROM_CMD_LINE); else ok = addToList(&szOptions, &numOptions, &options, argv[i]); } else if (streq(argv[i], "-compat")) ok = setOptString(&i, argc, argv, COMPAT_NDX, FROM_CMD_LINE); else if (streq(argv[i], "-config")) ok = setOptString(&i, argc, argv, CONFIG_NDX, FROM_CMD_LINE); else if (streq(argv[i], "-device")) deviceSpec = atoi(argv[++i]); /* only allow device IDs, not names */ else if (streq(argv[i], "-display")) ok = setOptString(&i, argc, argv, DISPLAY_NDX, FROM_CMD_LINE); else if (streq(argv[i], "-geometry")) ok = setOptString(&i, argc, argv, GEOMETRY_NDX, FROM_CMD_LINE); else if (streq(argv[i], "-help") || streq(argv[i], "-?")) { usage(argc, argv); exit(0); } else if (strpfx(argv[i], "-I")) ok = addToList(&szInclPath, &numInclPath, &inclPath, &argv[i][2]); else if (streq(argv[i], "-keycodes")) ok = setOptString(&i, argc, argv, KEYCODES_NDX, FROM_CMD_LINE); else if (streq(argv[i], "-keymap")) ok = setOptString(&i, argc, argv, KEYMAP_NDX, FROM_CMD_LINE); else if (streq(argv[i], "-layout")) ok = setOptString(&i, argc, argv, LAYOUT_NDX, FROM_CMD_LINE); else if (streq(argv[i], "-model")) ok = setOptString(&i, argc, argv, MODEL_NDX, FROM_CMD_LINE); else if (streq(argv[i], "-option")) { if ((i == argc - 1) || (argv[i + 1][0] == '\0') || (argv[i + 1][0] == '-')) { clearOptions = True; ok = addToList(&szOptions, &numOptions, &options, ""); if (i < argc - 1 && argv[i + 1][0] == '\0') i++; } else { ok = addToList(&szOptions, &numOptions, &options, argv[++i]); } } else if (streq(argv[i], "-print")) print = True; else if (streq(argv[i], "-query")) query = True; else if (streq(argv[i], "-rules")) ok = setOptString(&i, argc, argv, RULES_NDX, FROM_CMD_LINE); else if (streq(argv[i], "-symbols")) ok = setOptString(&i, argc, argv, SYMBOLS_NDX, FROM_CMD_LINE); else if (streq(argv[i], "-synch")) synch = True; else if (streq(argv[i], "-types")) ok = setOptString(&i, argc, argv, TYPES_NDX, FROM_CMD_LINE); else if (streq(argv[i], "-verbose") || (streq(argv[i], "-v"))) { if ((i < argc - 1) && (isdigit(argv[i + 1][0]))) verbose = atoi(argv[++i]); else verbose++; if (verbose < 0) { ERR1("Illegal verbose level %d. Reset to 0\n", verbose); verbose = 0; } else if (verbose > 10) { ERR1("Illegal verbose level %d. Reset to 10\n", verbose); verbose = 10; } VMSG1(7, "Setting verbose level to %d\n", verbose); } else if (streq(argv[i], "-variant")) ok = setOptString(&i, argc, argv, VARIANT_NDX, FROM_CMD_LINE); else { ERR1("Error! Option \"%s\" not recognized\n", argv[i]); ok = False; } } present = 0; if (svValue[TYPES_NDX]) present++; if (svValue[COMPAT_NDX]) present++; if (svValue[SYMBOLS_NDX]) present++; if (svValue[KEYCODES_NDX]) present++; if (svValue[GEOMETRY_NDX]) present++; if (svValue[CONFIG_NDX]) present++; if (svValue[MODEL_NDX]) present++; if (svValue[LAYOUT_NDX]) present++; if (svValue[VARIANT_NDX]) present++; if (svValue[KEYMAP_NDX] && present) { ERR("No other components can be specified when a keymap is present\n"); return False; } return ok; }