X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fcfg.c;h=433d7a0fac56ba6cb47e402fe573ed909941e8ed;hb=fd30311c8701d297f31f6dd92c628d1d9112911e;hp=194fb1890a086d6763e2557a2e9782060d08dc35;hpb=a14bc59fb8f27db193d74662dc9c5cb8237177ef;p=openvswitch diff --git a/lib/cfg.c b/lib/cfg.c index 194fb189..433d7a0f 100644 --- a/lib/cfg.c +++ b/lib/cfg.c @@ -143,22 +143,15 @@ cfg_set_file(const char *file_name) static int update_cookie(void) { + struct sha1_ctx context; int i; - SHA1Context context; - if (SHA1Reset(&context) != shaSuccess) { - return -1; - } + sha1_init(&context); for (i = 0; i < cfg.n; i++) { - if (SHA1Input(&context, (uint8_t *)cfg.names[i], - strlen(cfg.names[i])) != shaSuccess) { - return -1; - } - SHA1Input(&context, (uint8_t *)"\n", 1); - } - if (SHA1Result(&context, cfg_cookie) != shaSuccess) { - return -1; + sha1_update(&context, cfg.names[i], strlen(cfg.names[i])); + sha1_update(&context, "\n", 1); } + sha1_final(&context, cfg_cookie); return 0; } @@ -339,13 +332,16 @@ try_lock(int fd, bool block) int cfg_lock(uint8_t *cookie, int timeout) { - long long int start = time_msec(); + long long int start; long long int elapsed = 0; int fd; uint8_t curr_cookie[CFG_COOKIE_LEN]; assert(lock_fd < 0); COVERAGE_INC(cfg_lock); + + time_refresh(); + start = time_msec(); for (;;) { int error; @@ -680,6 +676,25 @@ cfg_del_match(const char *pattern_, ...) free(pattern); } +/* Fills 'svec' with all of the key-value pairs that match shell glob pattern + * 'pattern'. The caller must first initialize 'svec'. */ +void +cfg_get_matches(struct svec *svec, const char *pattern_, ...) +{ + char *pattern; + char **p; + + FORMAT_KEY(pattern_, pattern); + + for (p = cfg.names; *p; p++) { + if (!fnmatch(pattern, *p, 0)) { + svec_add(svec, *p); + } + } + + free(pattern); +} + /* Fills 'svec' with all of the key-value pairs that have sections that * begin with 'section'. The caller must first initialize 'svec'. */ void @@ -1105,8 +1120,8 @@ find_key(const char *key) static bool parse_mac(const char *s, uint8_t mac[6]) { - return sscanf(s, "%"SCNx8":%"SCNx8":%"SCNx8":%"SCNx8":%"SCNx8":%"SCNx8, - &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]) == 6; + return (sscanf(s, ETH_ADDR_SCAN_FMT, ETH_ADDR_SCAN_ARGS(mac)) + == ETH_ADDR_SCAN_COUNT); } static bool