X-Git-Url: http://git.bytex64.net/?a=blobdiff_plain;ds=sidebyside;f=tags.c;h=1130d5782a811187d2f7fda8945fe073c8b6bcf8;hb=97d379a62944d0be7d760f744a7efff7acfc2b4b;hp=4705b877f37daa0ee5176bfed741e86c118ee3e3;hpb=303c0e0dd35aee93d11cfbc69b64e977ef8bf95d;p=blerg.git diff --git a/tags.c b/tags.c index 4705b87..1130d57 100644 --- a/tags.c +++ b/tags.c @@ -68,7 +68,7 @@ int tag_add(const char *author, const char *tag, uint64_t record) { snprintf(filename, 512, "%s/%s", HASH_TAGS_PATH, tag + 1); break; case '@': - snprintf(filename, 512, "%s/%s", AUTHOR_TAGS_PATH, tag + 1); + snprintf(filename, 512, "%s/%s", REF_TAGS_PATH, tag + 1); break; default: fprintf(stderr, "Invalid tag type: %s\n", tag); @@ -104,7 +104,7 @@ struct tag * tag_list(const char *tag, uint64_t offset, uint64_t *count, int dir snprintf(filename, 512, "%s/%s", HASH_TAGS_PATH, tag + 1); break; case '@': - snprintf(filename, 512, "%s/%s", AUTHOR_TAGS_PATH, tag + 1); + snprintf(filename, 512, "%s/%s", REF_TAGS_PATH, tag + 1); break; default: fprintf(stderr, "Invalid tag type: %s\n", tag); @@ -161,3 +161,36 @@ tag_list_map_failed: tag_list_open_failed: return NULL; } + +int tag_exists(const char *tag) { + int taglen = strlen(tag); + char filename[512]; + + if (taglen < 2) { + fprintf(stderr, "Tag too short\n"); + return 0; + } else if (taglen > 33) { + fprintf(stderr, "Tag too long\n"); + return 0; + } + if (!(tag[0] == '@' || tag[0] == '#')) { + fprintf(stderr, "Invalid tag: %s\n", tag); + return 0; + } + + switch(tag[0]) { + case '#': + snprintf(filename, 512, "%s/%s", HASH_TAGS_PATH, tag + 1); + break; + case '@': + snprintf(filename, 512, "%s/%s", REF_TAGS_PATH, tag + 1); + break; + default: + fprintf(stderr, "Invalid tag type: %s\n", tag); + return 0; + } + if (access(filename, F_OK) == -1) + return 0; + else + return 1; +}