X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fcfg.c;h=433d7a0fac56ba6cb47e402fe573ed909941e8ed;hb=7a3696adbfe26cfbe515b3d3564d2e4a08096b2c;hp=833e6e51648e1656b27cc6f7d2d3606b9a97d4a5;hpb=5eccf359391f7fe2cdb0edbaaf5680895c115218;p=openvswitch diff --git a/lib/cfg.c b/lib/cfg.c index 833e6e51..433d7a0f 100644 --- a/lib/cfg.c +++ b/lib/cfg.c @@ -332,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; @@ -673,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 @@ -1098,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