mirror of
https://github.com/pygos/pkg-utils.git
synced 2024-11-22 04:49:46 +01:00
cleanup: move input file open/close into process_file function
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
This commit is contained in:
parent
f7e4aec2ea
commit
b688a39149
4 changed files with 29 additions and 51 deletions
|
@ -15,11 +15,7 @@ typedef struct {
|
||||||
int (*handle)(input_file_t *f, void *obj);
|
int (*handle)(input_file_t *f, void *obj);
|
||||||
} keyword_handler_t;
|
} keyword_handler_t;
|
||||||
|
|
||||||
void cleanup_file(input_file_t *f);
|
int process_file(const char *filename, const keyword_handler_t *handlers,
|
||||||
|
|
||||||
int open_file(input_file_t *f, const char *filename);
|
|
||||||
|
|
||||||
int process_file(input_file_t *f, const keyword_handler_t *handlers,
|
|
||||||
size_t count, void *obj);
|
size_t count, void *obj);
|
||||||
|
|
||||||
void input_file_complain(const input_file_t *f, const char *msg);
|
void input_file_complain(const input_file_t *f, const char *msg);
|
||||||
|
|
|
@ -57,47 +57,37 @@ retry:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cleanup_file(input_file_t *f)
|
|
||||||
{
|
|
||||||
fclose(f->f);
|
|
||||||
free(f->line);
|
|
||||||
}
|
|
||||||
|
|
||||||
int open_file(input_file_t *f, const char *filename)
|
|
||||||
{
|
|
||||||
memset(f, 0, sizeof(*f));
|
|
||||||
|
|
||||||
f->filename = filename;
|
|
||||||
f->f = fopen(filename, "r");
|
|
||||||
|
|
||||||
if (f->f == NULL) {
|
|
||||||
perror(f->filename);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void input_file_complain(const input_file_t *f, const char *msg)
|
void input_file_complain(const input_file_t *f, const char *msg)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: %zu: %s\n", f->filename, f->linenum, msg);
|
fprintf(stderr, "%s: %zu: %s\n", f->filename, f->linenum, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
int process_file(input_file_t *f, const keyword_handler_t *handlers,
|
int process_file(const char *filename, const keyword_handler_t *handlers,
|
||||||
size_t count, void *obj)
|
size_t count, void *obj)
|
||||||
{
|
{
|
||||||
|
input_file_t f;
|
||||||
size_t i, len;
|
size_t i, len;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
for (;;) {
|
memset(&f, 0, sizeof(f));
|
||||||
ret = prefetch_line(f);
|
|
||||||
if (ret < 0)
|
f.filename = filename;
|
||||||
|
f.f = fopen(filename, "r");
|
||||||
|
|
||||||
|
if (f.f == NULL) {
|
||||||
|
perror(f.filename);
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
ret = prefetch_line(&f);
|
||||||
|
if (ret < 0)
|
||||||
|
goto fail;
|
||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
ptr = f->line;
|
ptr = f.line;
|
||||||
|
|
||||||
for (i = 0; i < count; ++i) {
|
for (i = 0; i < count; ++i) {
|
||||||
len = strlen(handlers[i].name);
|
len = strlen(handlers[i].name);
|
||||||
|
@ -108,19 +98,25 @@ int process_file(input_file_t *f, const keyword_handler_t *handlers,
|
||||||
continue;
|
continue;
|
||||||
for (ptr += len; isspace(*ptr); ++ptr)
|
for (ptr += len; isspace(*ptr); ++ptr)
|
||||||
;
|
;
|
||||||
memmove(f->line, ptr, strlen(ptr) + 1);
|
memmove(f.line, ptr, strlen(ptr) + 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == count) {
|
if (i == count) {
|
||||||
fprintf(stderr, "%s: %zu: unknown keyword\n",
|
fprintf(stderr, "%s: %zu: unknown keyword\n",
|
||||||
f->filename, f->linenum);
|
f.filename, f.linenum);
|
||||||
return -1;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (handlers[i].handle(f, obj))
|
if (handlers[i].handle(&f, obj))
|
||||||
return -1;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fclose(f.f);
|
||||||
|
free(f.line);
|
||||||
return 0;
|
return 0;
|
||||||
|
fail:
|
||||||
|
fclose(f.f);
|
||||||
|
free(f.line);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,21 +97,13 @@ static compressor_t *get_default_compressor(void)
|
||||||
|
|
||||||
int desc_read(const char *path, pkg_desc_t *desc)
|
int desc_read(const char *path, pkg_desc_t *desc)
|
||||||
{
|
{
|
||||||
input_file_t f;
|
|
||||||
char *ptr;
|
char *ptr;
|
||||||
|
|
||||||
memset(desc, 0, sizeof(*desc));
|
memset(desc, 0, sizeof(*desc));
|
||||||
|
|
||||||
if (open_file(&f, path))
|
if (process_file(path, line_hooks, NUM_LINE_HOOKS, desc))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (process_file(&f, line_hooks, NUM_LINE_HOOKS, desc)) {
|
|
||||||
cleanup_file(&f);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanup_file(&f);
|
|
||||||
|
|
||||||
if (desc->datacmp == NULL)
|
if (desc->datacmp == NULL)
|
||||||
desc->datacmp = get_default_compressor();
|
desc->datacmp = get_default_compressor();
|
||||||
|
|
||||||
|
|
|
@ -281,12 +281,8 @@ static int alloc_file_ids(image_entry_t *list)
|
||||||
int filelist_read(const char *filename, image_entry_t **out)
|
int filelist_read(const char *filename, image_entry_t **out)
|
||||||
{
|
{
|
||||||
image_entry_t *list = NULL;
|
image_entry_t *list = NULL;
|
||||||
input_file_t f;
|
|
||||||
|
|
||||||
if (open_file(&f, filename))
|
if (process_file(filename, line_hooks, NUM_LINE_HOOKS, &list))
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (process_file(&f, line_hooks, NUM_LINE_HOOKS, &list))
|
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (list != NULL) {
|
if (list != NULL) {
|
||||||
|
@ -296,11 +292,9 @@ int filelist_read(const char *filename, image_entry_t **out)
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup_file(&f);
|
|
||||||
*out = list;
|
*out = list;
|
||||||
return 0;
|
return 0;
|
||||||
fail:
|
fail:
|
||||||
cleanup_file(&f);
|
|
||||||
image_entry_free_list(list);
|
image_entry_free_list(list);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue