зеркало из https://github.com/microsoft/git.git
grep: typesafe versions of grep_source_init
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>
This commit is contained in:
Родитель
8d33c3af0b
Коммит
50d92b5f03
|
@ -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) {
|
||||
|
|
46
grep.c
46
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)
|
||||
|
|
7
grep.h
7
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,
|
||||
|
|
Загрузка…
Ссылка в новой задаче