]> git.ipfire.org Git - thirdparty/git.git/commitdiff
grep: typesafe versions of grep_source_init
authorJonathan Tan <jonathantanmy@google.com>
Mon, 16 Aug 2021 21:09:53 +0000 (14:09 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 8 Sep 2021 18:47:55 +0000 (11:47 -0700)
grep_source_init() can create "struct grep_source" objects and,
depending on the value of the type passed, some void-pointer parameters have
different meanings. Because one of these types (GREP_SOURCE_OID) will
require an additional parameter in a subsequent patch, take the
opportunity to increase clarity and type safety by replacing this
function with individual functions for each type.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Reviewed-by: Matheus Tavares <matheus.bernardino@usp.br>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/grep.c
grep.c
grep.h

index 87bcb934a24c341872785b1213b43aa51a1032a4..e454335e9d8fee2f599b3f60e0ff62455012298f 100644 (file)
@@ -333,7 +333,7 @@ static int grep_oid(struct grep_opt *opt, const struct object_id *oid,
        struct grep_source gs;
 
        grep_source_name(opt, filename, tree_name_len, &pathbuf);
-       grep_source_init(&gs, GREP_SOURCE_OID, pathbuf.buf, path, oid);
+       grep_source_init_oid(&gs, pathbuf.buf, path, oid);
        strbuf_release(&pathbuf);
 
        if (num_threads > 1) {
@@ -359,7 +359,7 @@ static int grep_file(struct grep_opt *opt, const char *filename)
        struct grep_source gs;
 
        grep_source_name(opt, filename, 0, &buf);
-       grep_source_init(&gs, GREP_SOURCE_FILE, buf.buf, filename, filename);
+       grep_source_init_file(&gs, buf.buf, filename);
        strbuf_release(&buf);
 
        if (num_threads > 1) {
diff --git a/grep.c b/grep.c
index 424a39591b05e519d166e064a9f4e3e6d5973681..8a8105c2ebce5af0709d317b49a07ac6e7ec453f 100644 (file)
--- a/grep.c
+++ b/grep.c
@@ -1825,14 +1825,24 @@ int grep_source(struct grep_opt *opt, struct grep_source *gs)
        return grep_source_1(opt, gs, 0);
 }
 
+static void grep_source_init_buf(struct grep_source *gs, char *buf,
+                                unsigned long size)
+{
+       gs->type = GREP_SOURCE_BUF;
+       gs->name = NULL;
+       gs->path = NULL;
+       gs->buf = buf;
+       gs->size = size;
+       gs->driver = NULL;
+       gs->identifier = NULL;
+}
+
 int grep_buffer(struct grep_opt *opt, char *buf, unsigned long size)
 {
        struct grep_source gs;
        int r;
 
-       grep_source_init(&gs, GREP_SOURCE_BUF, NULL, NULL, NULL);
-       gs.buf = buf;
-       gs.size = size;
+       grep_source_init_buf(&gs, buf, size);
 
        r = grep_source(opt, &gs);
 
@@ -1840,28 +1850,28 @@ int grep_buffer(struct grep_opt *opt, char *buf, unsigned long size)
        return r;
 }
 
-void grep_source_init(struct grep_source *gs, enum grep_source_type type,
-                     const char *name, const char *path,
-                     const void *identifier)
+void grep_source_init_file(struct grep_source *gs, const char *name,
+                          const char *path)
 {
-       gs->type = type;
+       gs->type = GREP_SOURCE_FILE;
        gs->name = xstrdup_or_null(name);
        gs->path = xstrdup_or_null(path);
        gs->buf = NULL;
        gs->size = 0;
        gs->driver = NULL;
+       gs->identifier = xstrdup(path);
+}
 
-       switch (type) {
-       case GREP_SOURCE_FILE:
-               gs->identifier = xstrdup(identifier);
-               break;
-       case GREP_SOURCE_OID:
-               gs->identifier = oiddup(identifier);
-               break;
-       case GREP_SOURCE_BUF:
-               gs->identifier = NULL;
-               break;
-       }
+void grep_source_init_oid(struct grep_source *gs, const char *name,
+                         const char *path, const struct object_id *oid)
+{
+       gs->type = GREP_SOURCE_OID;
+       gs->name = xstrdup_or_null(name);
+       gs->path = xstrdup_or_null(path);
+       gs->buf = NULL;
+       gs->size = 0;
+       gs->driver = NULL;
+       gs->identifier = oiddup(oid);
 }
 
 void grep_source_clear(struct grep_source *gs)
diff --git a/grep.h b/grep.h
index 72f82b1e302397b20f8ae4ebd75a0b534fff99f5..480b3f5bba611c59525ed7794a6da32a2eaf48f1 100644 (file)
--- a/grep.h
+++ b/grep.h
@@ -195,9 +195,10 @@ struct grep_source {
        struct userdiff_driver *driver;
 };
 
-void grep_source_init(struct grep_source *gs, enum grep_source_type type,
-                     const char *name, const char *path,
-                     const void *identifier);
+void grep_source_init_file(struct grep_source *gs, const char *name,
+                          const char *path);
+void grep_source_init_oid(struct grep_source *gs, const char *name,
+                         const char *path, const struct object_id *oid);
 void grep_source_clear_data(struct grep_source *gs);
 void grep_source_clear(struct grep_source *gs);
 void grep_source_load_driver(struct grep_source *gs,