/** * mnt_resolve_tag: * @token: tag name * @value: tag value * @cache: for results or NULL * * Returns: device name or NULL in case of error. The result has to be * deallocated by free() if @cache is NULL. */ char *mnt_resolve_tag(const char *token, const char *value, struct libmnt_cache *cache) { char *p = NULL; /*DBG(CACHE, ul_debugobj(cache, "resolving tag token=%s value=%s", token, value));*/ if (!token || !value) return NULL; if (cache) p = (char *) cache_find_tag(cache, token, value); if (!p) { /* returns newly allocated string */ p = blkid_evaluate_tag(token, value, cache ? &cache->bc : NULL); if (p && cache && cache_add_tag(cache, token, value, p, 0)) goto error; } return p; error: free(p); return NULL; }
/** * mnt_cache_device_has_tag: * @cache: paths cache * @devname: path to the device * @token: tag name (e.g "LABEL") * @value: tag value * * Look up @cache to check if @tag+@value are associated with @devname. * * Returns: 1 on success or 0. */ int mnt_cache_device_has_tag(struct libmnt_cache *cache, const char *devname, const char *token, const char *value) { const char *path = cache_find_tag(cache, token, value); if (path && devname && strcmp(path, devname) == 0) return 1; return 0; }
int test_read_tags(struct libmnt_test *ts, int argc, char *argv[]) { char line[BUFSIZ]; struct libmnt_cache *cache; int i; cache = mnt_new_cache(); if (!cache) return -ENOMEM; while(fgets(line, sizeof(line), stdin)) { size_t sz = strlen(line); if (line[sz - 1] == '\n') line[sz - 1] = '\0'; if (!strcmp(line, "quit")) break; if (*line == '/') { if (mnt_cache_read_tags(cache, line) < 0) fprintf(stderr, "%s: read tags failed\n", line); } else if (strchr(line, '=')) { char *tag, *val; const char *cn = NULL; if (!blkid_parse_tag_string(line, &tag, &val)) { cn = cache_find_tag(cache, tag, val); free(tag); free(val); } if (cn) printf("%s: %s\n", line, cn); else printf("%s: not cached\n", line); } } for (i = 0; i < cache->nents; i++) { struct mnt_cache_entry *e = &cache->ents[i]; if (!(e->flag & MNT_CACHE_ISTAG)) continue; printf("%15s : %5s : %s\n", e->value, e->key, e->key + strlen(e->key) + 1); } mnt_free_cache(cache); return 0; }