| -rw-r--r-- | Makefile | 4 | ||||
| -rw-r--r-- | cgit.c | 111 | ||||
| -rw-r--r-- | cgit.h | 10 | ||||
| -rw-r--r-- | filter.c | 6 | ||||
| m--------- | git | 0 | ||||
| -rw-r--r-- | parsing.c | 8 | ||||
| -rw-r--r-- | scan-tree.c | 40 | ||||
| -rw-r--r-- | scan-tree.h | 4 | ||||
| -rw-r--r-- | shared.c | 17 | ||||
| -rw-r--r-- | ui-blame.c | 2 | ||||
| -rw-r--r-- | ui-clone.c | 24 | ||||
| -rw-r--r-- | ui-plain.c | 2 | ||||
| -rw-r--r-- | ui-repolist.c | 2 |
13 files changed, 114 insertions, 116 deletions
@@ -1,6 +1,6 @@ all:: -CGIT_VERSION = v1.3.1 +CGIT_VERSION = v1.3 CGIT_SCRIPT_NAME = cgit.cgi CGIT_SCRIPT_PATH = /var/www/htdocs/cgit CGIT_DATA_PATH = $(CGIT_SCRIPT_PATH) @@ -14,7 +14,7 @@ htmldir = $(docdir) pdfdir = $(docdir) mandir = $(prefix)/share/man SHA1_HEADER = <openssl/sha.h> -GIT_VER = 2.54.0 +GIT_VER = 2.53.0 GIT_URL = https://www.kernel.org/pub/software/scm/git/git-$(GIT_VER).tar.xz INSTALL = install COPYTREE = cp -r @@ -41,25 +41,25 @@ static void add_mimetype(const char *name, const char *value) static void process_cached_repolist(const char *path); -void cgit_repo_config(struct cgit_repo *repo, const char *name, const char *value) +static void repo_config(struct cgit_repo *repo, const char *name, const char *value) { const char *path; struct string_list_item *item; if (!strcmp(name, "name")) - repo->name = strdup_first_line(value); + repo->name = xstrdup(value); else if (!strcmp(name, "clone-url")) - repo->clone_url = strdup_first_line(value); + repo->clone_url = xstrdup(value); else if (!strcmp(name, "desc")) - repo->desc = strdup_first_line(value); + repo->desc = xstrdup(value); else if (!strcmp(name, "owner")) - repo->owner = strdup_first_line(value); + repo->owner = xstrdup(value); else if (!strcmp(name, "homepage")) - repo->homepage = strdup_first_line(value); + repo->homepage = xstrdup(value); else if (!strcmp(name, "defbranch")) - repo->defbranch = strdup_first_line(value); + repo->defbranch = xstrdup(value); else if (!strcmp(name, "extra-head-content")) - repo->extra_head_content = strdup_first_line(value); + repo->extra_head_content = xstrdup(value); else if (!strcmp(name, "snapshots")) repo->snapshots = ctx.cfg.snapshots & cgit_parse_snapshots_mask(value); else if (!strcmp(name, "enable-blame")) @@ -91,22 +91,22 @@ void cgit_repo_config(struct cgit_repo *repo, const char *name, const char *valu } else if (!strcmp(name, "max-stats")) repo->max_stats = cgit_find_stats_period(value, NULL); else if (!strcmp(name, "module-link")) - repo->module_link= strdup_first_line(value); + repo->module_link= xstrdup(value); else if (skip_prefix(name, "module-link.", &path)) { - item = string_list_append(&repo->submodules, strdup_first_line(path)); - item->util = strdup_first_line(value); + item = string_list_append(&repo->submodules, xstrdup(path)); + item->util = xstrdup(value); } else if (!strcmp(name, "section")) - repo->section = strdup_first_line(value); + repo->section = xstrdup(value); else if (!strcmp(name, "snapshot-prefix")) - repo->snapshot_prefix = strdup_first_line(value); + repo->snapshot_prefix = xstrdup(value); else if (!strcmp(name, "readme") && value != NULL) { if (repo->readme.items == ctx.cfg.readme.items) memset(&repo->readme, 0, sizeof(repo->readme)); - string_list_append(&repo->readme, strdup_first_line(value)); + string_list_append(&repo->readme, xstrdup(value)); } else if (!strcmp(name, "logo") && value != NULL) - repo->logo = strdup_first_line(value); + repo->logo = xstrdup(value); else if (!strcmp(name, "logo-link") && value != NULL) - repo->logo_link = strdup_first_line(value); + repo->logo_link = xstrdup(value); else if (!strcmp(name, "hide")) repo->hide = atoi(value); else if (!strcmp(name, "ignore")) @@ -130,41 +130,41 @@ static void config_cb(const char *name, const char *value) const char *arg; if (!strcmp(name, "section")) - ctx.cfg.section = strdup_first_line(value); + ctx.cfg.section = xstrdup(value); else if (!strcmp(name, "repo.url")) ctx.repo = cgit_add_repo(value); else if (ctx.repo && !strcmp(name, "repo.path")) ctx.repo->path = trim_end(value, '/'); else if (ctx.repo && skip_prefix(name, "repo.", &arg)) - cgit_repo_config(ctx.repo, arg, value); + repo_config(ctx.repo, arg, value); else if (!strcmp(name, "readme")) - string_list_append(&ctx.cfg.readme, strdup_first_line(value)); + string_list_append(&ctx.cfg.readme, xstrdup(value)); else if (!strcmp(name, "root-title")) - ctx.cfg.root_title = strdup_first_line(value); + ctx.cfg.root_title = xstrdup(value); else if (!strcmp(name, "root-desc")) - ctx.cfg.root_desc = strdup_first_line(value); + ctx.cfg.root_desc = xstrdup(value); else if (!strcmp(name, "root-readme")) - ctx.cfg.root_readme = strdup_first_line(value); + ctx.cfg.root_readme = xstrdup(value); else if (!strcmp(name, "css")) - string_list_append(&ctx.cfg.css, strdup_first_line(value)); + string_list_append(&ctx.cfg.css, xstrdup(value)); else if (!strcmp(name, "js")) - string_list_append(&ctx.cfg.js, strdup_first_line(value)); + string_list_append(&ctx.cfg.js, xstrdup(value)); else if (!strcmp(name, "favicon")) - ctx.cfg.favicon = strdup_first_line(value); + ctx.cfg.favicon = xstrdup(value); else if (!strcmp(name, "footer")) - ctx.cfg.footer = strdup_first_line(value); + ctx.cfg.footer = xstrdup(value); else if (!strcmp(name, "head-include")) - ctx.cfg.head_include = strdup_first_line(value); + ctx.cfg.head_include = xstrdup(value); else if (!strcmp(name, "header")) - ctx.cfg.header = strdup_first_line(value); + ctx.cfg.header = xstrdup(value); else if (!strcmp(name, "logo")) - ctx.cfg.logo = strdup_first_line(value); + ctx.cfg.logo = xstrdup(value); else if (!strcmp(name, "logo-link")) - ctx.cfg.logo_link = strdup_first_line(value); + ctx.cfg.logo_link = xstrdup(value); else if (!strcmp(name, "module-link")) - ctx.cfg.module_link = strdup_first_line(value); + ctx.cfg.module_link = xstrdup(value); else if (!strcmp(name, "strict-export")) - ctx.cfg.strict_export = strdup_first_line(value); + ctx.cfg.strict_export = xstrdup(value); else if (!strcmp(name, "virtual-root")) ctx.cfg.virtual_root = ensure_end(value, '/'); else if (!strcmp(name, "noplainemail")) @@ -206,7 +206,7 @@ static void config_cb(const char *name, const char *value) else if (!strcmp(name, "cache-size")) ctx.cfg.cache_size = atoi(value); else if (!strcmp(name, "cache-root")) - ctx.cfg.cache_root = strdup_first_line(expand_macros(value)); + ctx.cfg.cache_root = xstrdup(expand_macros(value)); else if (!strcmp(name, "cache-root-ttl")) ctx.cfg.cache_root_ttl = atoi(value); else if (!strcmp(name, "cache-repo-ttl")) @@ -250,21 +250,21 @@ static void config_cb(const char *name, const char *value) } else if (!strcmp(name, "max-commit-count")) ctx.cfg.max_commit_count = atoi(value); else if (!strcmp(name, "project-list")) - ctx.cfg.project_list = strdup_first_line(expand_macros(value)); + ctx.cfg.project_list = xstrdup(expand_macros(value)); else if (!strcmp(name, "scan-path")) if (ctx.cfg.cache_size) process_cached_repolist(expand_macros(value)); else if (ctx.cfg.project_list) scan_projects(expand_macros(value), - ctx.cfg.project_list); + ctx.cfg.project_list, repo_config); else - scan_tree(expand_macros(value)); + scan_tree(expand_macros(value), repo_config); else if (!strcmp(name, "scan-hidden-path")) ctx.cfg.scan_hidden_path = atoi(value); else if (!strcmp(name, "section-from-path")) ctx.cfg.section_from_path = atoi(value); else if (!strcmp(name, "repository-sort")) - ctx.cfg.repository_sort = strdup_first_line(value); + ctx.cfg.repository_sort = xstrdup(value); else if (!strcmp(name, "section-sort")) ctx.cfg.section_sort = atoi(value); else if (!strcmp(name, "source-filter")) @@ -278,19 +278,19 @@ static void config_cb(const char *name, const char *value) else if (!strcmp(name, "side-by-side-diffs")) ctx.cfg.difftype = atoi(value) ? DIFF_SSDIFF : DIFF_UNIFIED; else if (!strcmp(name, "agefile")) - ctx.cfg.agefile = strdup_first_line(value); + ctx.cfg.agefile = xstrdup(value); else if (!strcmp(name, "mimetype-file")) - ctx.cfg.mimetype_file = strdup_first_line(value); + ctx.cfg.mimetype_file = xstrdup(value); else if (!strcmp(name, "renamelimit")) ctx.cfg.renamelimit = atoi(value); else if (!strcmp(name, "remove-suffix")) ctx.cfg.remove_suffix = atoi(value); else if (!strcmp(name, "robots")) - ctx.cfg.robots = strdup_first_line(value); + ctx.cfg.robots = xstrdup(value); else if (!strcmp(name, "clone-prefix")) - ctx.cfg.clone_prefix = strdup_first_line(value); + ctx.cfg.clone_prefix = xstrdup(value); else if (!strcmp(name, "clone-url")) - ctx.cfg.clone_url = strdup_first_line(value); + ctx.cfg.clone_url = xstrdup(value); else if (!strcmp(name, "local-time")) ctx.cfg.local_time = atoi(value); else if (!strcmp(name, "commit-sort")) { @@ -786,6 +786,15 @@ static char *build_snapshot_setting(int bitmap) return strbuf_detach(&result, NULL); } +static char *get_first_line(char *txt) +{ + char *t = xstrdup(txt); + char *p = strchr(t, '\n'); + if (p) + *p = '\0'; + return t; +} + static void print_repo(FILE *f, struct cgit_repo *repo) { struct string_list_item *item; @@ -794,8 +803,11 @@ static void print_repo(FILE *f, struct cgit_repo *repo) fprintf(f, "repo.path=%s\n", repo->path); if (repo->owner) fprintf(f, "repo.owner=%s\n", repo->owner); - if (repo->desc) - fprintf(f, "repo.desc=%s\n", repo->desc); + if (repo->desc) { + char *tmp = get_first_line(repo->desc); + fprintf(f, "repo.desc=%s\n", tmp); + free(tmp); + } for_each_string_list_item(item, &repo->readme) { if (item->util) fprintf(f, "repo.readme=%s:%s\n", (char *)item->util, item->string); @@ -896,9 +908,9 @@ static int generate_cached_repolist(const char *path, const char *cached_rc) } idx = cgit_repolist.count; if (ctx.cfg.project_list) - scan_projects(path, ctx.cfg.project_list); + scan_projects(path, ctx.cfg.project_list, repo_config); else - scan_tree(path); + scan_tree(path, repo_config); print_repolist(f, &cgit_repolist, idx); if (rename(locked_rc.buf, cached_rc)) fprintf(stderr, "[cgit] Error renaming %s to %s: %s (%d)\n", @@ -928,9 +940,10 @@ static void process_cached_repolist(const char *path) */ if (generate_cached_repolist(path, cached_rc.buf)) { if (ctx.cfg.project_list) - scan_projects(path, ctx.cfg.project_list); + scan_projects(path, ctx.cfg.project_list, + repo_config); else - scan_tree(path); + scan_tree(path, repo_config); } goto out; } @@ -1011,7 +1024,7 @@ static void cgit_parse_args(int argc, const char **argv) */ ctx.cfg.snapshots = 0xFF; scan++; - scan_tree(arg); + scan_tree(arg, repo_config); } } if (scan) { @@ -121,6 +121,9 @@ struct cgit_repo { int ignore; }; +typedef void (*repo_config_fn)(struct cgit_repo *repo, const char *name, + const char *value); + struct cgit_repolist { int length; int count; @@ -331,8 +334,7 @@ extern const struct cgit_snapshot_format cgit_snapshot_formats[]; extern char *cgit_default_repo_desc; extern struct cgit_repo *cgit_add_repo(const char *url); extern struct cgit_repo *cgit_get_repoinfo(const char *url); -extern void cgit_repo_config(struct cgit_repo *repo, const char *name, - const char *value); +extern void cgit_repo_config_cb(const char *name, const char *value); extern int chk_zero(int result, char *msg); extern int chk_positive(int result, char *msg); @@ -393,9 +395,7 @@ extern void cgit_init_filters(void); extern void cgit_prepare_repo_env(struct cgit_repo * repo); -extern int read_first_line(const char *path, char **buf, size_t *size); - -extern char *strdup_first_line(const char *txt); +extern int readfile(const char *path, char **buf, size_t *size); extern char *expand_macros(const char *txt); @@ -114,7 +114,7 @@ static struct cgit_filter *new_exec_filter(const char *cmd, int argument_count) f = xmalloc(sizeof(*f)); /* We leave argv for now and assign it below. */ - cgit_exec_filter_init(f, strdup_first_line(cmd), NULL); + cgit_exec_filter_init(f, xstrdup(cmd), NULL); f->base.argument_count = argument_count; args_size = (2 + argument_count) * sizeof(char *); f->argv = xmalloc(args_size); @@ -356,7 +356,7 @@ static struct cgit_filter *new_lua_filter(const char *cmd, int argument_count) filter->base.fprintfp = fprintf_lua_filter; filter->base.cleanup = cleanup_lua_filter; filter->base.argument_count = argument_count; - filter->script_file = strdup_first_line(cmd); + filter->script_file = xstrdup(cmd); return &filter->base; } @@ -402,7 +402,7 @@ static const struct { struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype) { - const char *colon; + char *colon; int i; size_t len; int argument_count; diff --git a/git b/git -Subproject 94f057755b7941b321fd11fec1b2e3ca5313a4e +Subproject 67ad42147a7acc2af6074753ebd03d904476118 @@ -19,7 +19,7 @@ */ void cgit_parse_url(const char *url) { - char *c, *cmd, *p, *buf; + char *c, *cmd, *p; struct cgit_repo *repo; if (!url || url[0] == '\0') @@ -32,12 +32,11 @@ void cgit_parse_url(const char *url) return; } - buf = xstrdup(url); cmd = NULL; - c = strchr(buf, '/'); + c = strchr(url, '/'); while (c) { c[0] = '\0'; - repo = cgit_get_repoinfo(buf); + repo = cgit_get_repoinfo(url); if (repo) { ctx.repo = repo; cmd = c; @@ -57,7 +56,6 @@ void cgit_parse_url(const char *url) if (cmd[1]) ctx.qry.page = xstrdup(cmd + 1); } - free(buf); } static char *substr(const char *head, const char *tail) diff --git a/scan-tree.c b/scan-tree.c index c120efe..8858b74 100644 --- a/scan-tree.c +++ b/scan-tree.c @@ -47,10 +47,11 @@ out: } static struct cgit_repo *repo; +static repo_config_fn config_fn; static void scan_tree_repo_config(const char *name, const char *value) { - cgit_repo_config(repo, name, value); + config_fn(repo, name, value); } static int gitconfig_config(const char *key, const char *value, @@ -59,15 +60,15 @@ static int gitconfig_config(const char *key, const char *value, const char *name; if (!strcmp(key, "gitweb.owner")) - cgit_repo_config(repo, "owner", value); + config_fn(repo, "owner", value); else if (!strcmp(key, "gitweb.description")) - cgit_repo_config(repo, "desc", value); + config_fn(repo, "desc", value); else if (!strcmp(key, "gitweb.category")) - cgit_repo_config(repo, "section", value); + config_fn(repo, "section", value); else if (!strcmp(key, "gitweb.homepage")) - cgit_repo_config(repo, "homepage", value); + config_fn(repo, "homepage", value); else if (skip_prefix(key, "cgit.", &name)) - cgit_repo_config(repo, name, value); + config_fn(repo, name, value); return 0; } @@ -79,7 +80,7 @@ static char *xstrrchr(char *s, char *from, int c) return from < s ? NULL : from; } -static void add_repo(const char *base, struct strbuf *path) +static void add_repo(const char *base, struct strbuf *path, repo_config_fn fn) { struct stat st; struct passwd *pwd; @@ -121,6 +122,7 @@ static void add_repo(const char *base, struct strbuf *path) strbuf_setlen(&rel, rel.len - 1); repo = cgit_add_repo(rel.buf); + config_fn = fn; if (ctx.cfg.enable_git_config) { strbuf_addstr(path, "config"); git_config_from_file(gitconfig_config, path->buf, NULL); @@ -133,7 +135,7 @@ static void add_repo(const char *base, struct strbuf *path) strip_suffix_mem(repo->url, &urllen, "/"); repo->url[urllen] = '\0'; } - repo->path = strdup_first_line(path->buf); + repo->path = xstrdup(path->buf); while (!repo->owner) { if ((pwd = getpwuid(st.st_uid)) == NULL) { fprintf(stderr, "Error reading owner-info for %s: %s (%d)\n", @@ -143,13 +145,13 @@ static void add_repo(const char *base, struct strbuf *path) if (pwd->pw_gecos) if ((p = strchr(pwd->pw_gecos, ','))) *p = '\0'; - repo->owner = strdup_first_line(pwd->pw_gecos ? pwd->pw_gecos : pwd->pw_name); + repo->owner = xstrdup(pwd->pw_gecos ? pwd->pw_gecos : pwd->pw_name); } if (repo->desc == cgit_default_repo_desc || !repo->desc) { strbuf_addstr(path, "description"); if (!stat(path->buf, &st)) - read_first_line(path->buf, &repo->desc, &size); + readfile(path->buf, &repo->desc, &size); strbuf_setlen(path, pathlen); } @@ -166,7 +168,7 @@ static void add_repo(const char *base, struct strbuf *path) } if (slash && !n) { *slash = '\0'; - repo->section = strdup_first_line(rel.buf); + repo->section = xstrdup(rel.buf); *slash = '/'; if (starts_with(repo->name, repo->section)) { repo->name += strlen(repo->section); @@ -183,7 +185,7 @@ static void add_repo(const char *base, struct strbuf *path) strbuf_release(&rel); } -static void scan_path(const char *base, const char *path) +static void scan_path(const char *base, const char *path, repo_config_fn fn) { DIR *dir = opendir(path); struct dirent *ent; @@ -199,12 +201,12 @@ static void scan_path(const char *base, const char *path) strbuf_add(&pathbuf, path, strlen(path)); if (is_git_dir(pathbuf.buf)) { - add_repo(base, &pathbuf); + add_repo(base, &pathbuf, fn); goto end; } strbuf_addstr(&pathbuf, "/.git"); if (is_git_dir(pathbuf.buf)) { - add_repo(base, &pathbuf); + add_repo(base, &pathbuf, fn); goto end; } /* @@ -229,14 +231,14 @@ static void scan_path(const char *base, const char *path) continue; } if (S_ISDIR(st.st_mode)) - scan_path(base, pathbuf.buf); + scan_path(base, pathbuf.buf, fn); } end: strbuf_release(&pathbuf); closedir(dir); } -void scan_projects(const char *path, const char *projectsfile) +void scan_projects(const char *path, const char *projectsfile, repo_config_fn fn) { struct strbuf line = STRBUF_INIT; FILE *projects; @@ -253,7 +255,7 @@ void scan_projects(const char *path, const char *projectsfile) continue; strbuf_insert(&line, 0, "/", 1); strbuf_insert(&line, 0, path, strlen(path)); - scan_path(path, line.buf); + scan_path(path, line.buf, fn); } if ((err = ferror(projects))) { fprintf(stderr, "Error reading from projectsfile %s: %s (%d)\n", @@ -263,7 +265,7 @@ void scan_projects(const char *path, const char *projectsfile) strbuf_release(&line); } -void scan_tree(const char *path) +void scan_tree(const char *path, repo_config_fn fn) { - scan_path(path, path); + scan_path(path, path, fn); } diff --git a/scan-tree.h b/scan-tree.h index def0a7a..1afbd4b 100644 --- a/scan-tree.h +++ b/scan-tree.h @@ -1,2 +1,2 @@ -extern void scan_projects(const char *path, const char *projectsfile); -extern void scan_tree(const char *path); +extern void scan_projects(const char *path, const char *projectsfile, repo_config_fn fn); +extern void scan_tree(const char *path, repo_config_fn fn); @@ -52,7 +52,6 @@ struct cgit_repo *cgit_add_repo(const char *url) ret = &cgit_repolist.repos[cgit_repolist.count-1]; memset(ret, 0, sizeof(struct cgit_repo)); ret->url = trim_end(url, '/'); - *strchrnul(ret->url, '\n') = '\0'; ret->name = ret->url; ret->path = NULL; ret->desc = cgit_default_repo_desc; @@ -441,10 +440,9 @@ void cgit_prepare_repo_env(struct cgit_repo * repo) } /* Read the content of the specified file into a newly allocated buffer, - * zeroterminate the buffer, truncate at a new line, and return 0 on success, - * errno otherwise. + * zeroterminate the buffer and return 0 on success, errno otherwise. */ -int read_first_line(const char *path, char **buf, size_t *size) +int readfile(const char *path, char **buf, size_t *size) { int fd, e; struct stat st; @@ -465,18 +463,10 @@ int read_first_line(const char *path, char **buf, size_t *size) *size = read_in_full(fd, *buf, st.st_size); e = errno; (*buf)[*size] = '\0'; - *strchrnul(*buf, '\n') = '\0'; close(fd); return (*size == st.st_size ? 0 : e); } -char *strdup_first_line(const char *txt) -{ - char *t = xstrdup(txt); - *strchrnul(t, '\n') = '\0'; - return t; -} - static int is_token_char(char c) { return isalnum(c) || c == '_'; @@ -551,8 +541,7 @@ char *expand_macros(const char *txt) char *get_mimetype_for_filename(const char *filename) { - const char *ext; - char *mimetype, line[1024]; + char *ext, *mimetype, line[1024]; struct string_list list = STRING_LIST_INIT_NODUP; int i; FILE *file; @@ -263,7 +263,7 @@ static int walk_tree(const struct object_id *oid, struct strbuf *base, static int basedir_len(const char *path) { - const char *p = strrchr(path, '/'); + char *p = strrchr(path, '/'); if (p) return p - path + 1; return 0; @@ -33,26 +33,22 @@ static int print_ref_info(const struct reference *ref, void *cb_data) static void print_pack_info(void) { - struct odb_source *source; + struct packfile_list_entry *e; char *offset; ctx.page.mimetype = "text/plain"; ctx.page.filename = "objects/info/packs"; cgit_print_http_headers(); odb_reprepare(the_repository->objects); - for (source = the_repository->objects->sources; source; source = source->next) { - struct odb_source_files *files = odb_source_files_downcast(source); - struct packfile_list_entry *e; - for (e = files->packed->packs.head; e; e = e->next) { - struct packed_git *p = e->pack; - if (p->pack_local) { - offset = strrchr(p->pack_name, '/'); - if (offset && offset[1] != '\0') - ++offset; - else - offset = p->pack_name; - htmlf("P %s\n", offset); - } + for (e = packfile_store_get_packs(the_repository->objects->sources->packfiles); e; e = e->next) { + struct packed_git *p = e->pack; + if (p->pack_local) { + offset = strrchr(p->pack_name, '/'); + if (offset && offset[1] != '\0') + ++offset; + else + offset = p->pack_name; + htmlf("P %s\n", offset); } } } @@ -157,7 +157,7 @@ static int walk_tree(const struct object_id *oid, struct strbuf *base, static int basedir_len(const char *path) { - const char *p = strrchr(path, '/'); + char *p = strrchr(path, '/'); if (p) return p - path + 1; return 0; diff --git a/ui-repolist.c b/ui-repolist.c index 1b224cf..d12e3dd 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -18,7 +18,7 @@ static time_t read_agefile(const char *path) char *buf = NULL; struct strbuf date_buf = STRBUF_INIT; - if (read_first_line(path, &buf, &size)) { + if (readfile(path, &buf, &size)) { free(buf); return 0; } |