Add tag searching to web API
[blerg.git] / tags.c
diff --git a/tags.c b/tags.c
index 4705b87..1130d57 100644 (file)
--- 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;
+}