strbuf_read_file enhancement, and use it.
* make strbuf_read_file take a size hint (works like strbuf_read) * use it in a couple of places. Signed-off-by: Pierre Habouzit <madcoder@debian.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
b315c5c081
commit
387e7e19d7
@ -1425,8 +1425,6 @@ static void show_stats(struct patch *patch)
|
|||||||
|
|
||||||
static int read_old_data(struct stat *st, const char *path, struct strbuf *buf)
|
static int read_old_data(struct stat *st, const char *path, struct strbuf *buf)
|
||||||
{
|
{
|
||||||
int fd;
|
|
||||||
|
|
||||||
switch (st->st_mode & S_IFMT) {
|
switch (st->st_mode & S_IFMT) {
|
||||||
case S_IFLNK:
|
case S_IFLNK:
|
||||||
strbuf_grow(buf, st->st_size);
|
strbuf_grow(buf, st->st_size);
|
||||||
@ -1435,14 +1433,8 @@ static int read_old_data(struct stat *st, const char *path, struct strbuf *buf)
|
|||||||
strbuf_setlen(buf, st->st_size);
|
strbuf_setlen(buf, st->st_size);
|
||||||
return 0;
|
return 0;
|
||||||
case S_IFREG:
|
case S_IFREG:
|
||||||
fd = open(path, O_RDONLY);
|
if (strbuf_read_file(buf, path, st->st_size) != st->st_size)
|
||||||
if (fd < 0)
|
return error("unable to open or read %s", path);
|
||||||
return error("unable to open %s", path);
|
|
||||||
if (strbuf_read(buf, fd, st->st_size) < 0) {
|
|
||||||
close(fd);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
close(fd);
|
|
||||||
convert_to_git(path, buf->buf, buf->len, buf);
|
convert_to_git(path, buf->buf, buf->len, buf);
|
||||||
return 0;
|
return 0;
|
||||||
default:
|
default:
|
||||||
|
@ -2002,7 +2002,6 @@ static struct commit *fake_working_tree_commit(const char *path, const char *con
|
|||||||
unsigned char head_sha1[20];
|
unsigned char head_sha1[20];
|
||||||
struct strbuf buf;
|
struct strbuf buf;
|
||||||
const char *ident;
|
const char *ident;
|
||||||
int fd;
|
|
||||||
time_t now;
|
time_t now;
|
||||||
int size, len;
|
int size, len;
|
||||||
struct cache_entry *ce;
|
struct cache_entry *ce;
|
||||||
@ -2041,11 +2040,8 @@ static struct commit *fake_working_tree_commit(const char *path, const char *con
|
|||||||
mode = canon_mode(st.st_mode);
|
mode = canon_mode(st.st_mode);
|
||||||
switch (st.st_mode & S_IFMT) {
|
switch (st.st_mode & S_IFMT) {
|
||||||
case S_IFREG:
|
case S_IFREG:
|
||||||
fd = open(read_from, O_RDONLY);
|
if (strbuf_read_file(&buf, read_from, st.st_size) != st.st_size)
|
||||||
if (fd < 0)
|
die("cannot open or read %s", read_from);
|
||||||
die("cannot open %s", read_from);
|
|
||||||
if (strbuf_read(&buf, fd, 0) != xsize_t(st.st_size))
|
|
||||||
die("cannot read %s", read_from);
|
|
||||||
break;
|
break;
|
||||||
case S_IFLNK:
|
case S_IFLNK:
|
||||||
if (readlink(read_from, buf.buf, buf.alloc) != fin_size)
|
if (readlink(read_from, buf.buf, buf.alloc) != fin_size)
|
||||||
|
@ -51,7 +51,7 @@ static void launch_editor(const char *path, struct strbuf *buffer)
|
|||||||
if (run_command(&child))
|
if (run_command(&child))
|
||||||
die("There was a problem with the editor %s.", editor);
|
die("There was a problem with the editor %s.", editor);
|
||||||
|
|
||||||
if (strbuf_read_file(buffer, path) < 0)
|
if (strbuf_read_file(buffer, path, 0) < 0)
|
||||||
die("could not read message file '%s': %s",
|
die("could not read message file '%s': %s",
|
||||||
path, strerror(errno));
|
path, strerror(errno));
|
||||||
}
|
}
|
||||||
@ -356,8 +356,6 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!strcmp(arg, "-F")) {
|
if (!strcmp(arg, "-F")) {
|
||||||
int fd;
|
|
||||||
|
|
||||||
annotate = 1;
|
annotate = 1;
|
||||||
i++;
|
i++;
|
||||||
if (i == argc)
|
if (i == argc)
|
||||||
@ -365,17 +363,14 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
|
|||||||
if (message)
|
if (message)
|
||||||
die("only one -F or -m option is allowed.");
|
die("only one -F or -m option is allowed.");
|
||||||
|
|
||||||
if (!strcmp(argv[i], "-"))
|
if (!strcmp(argv[i], "-")) {
|
||||||
fd = 0;
|
if (strbuf_read(&buf, 0, 1024) < 0)
|
||||||
else {
|
die("cannot read %s", argv[i]);
|
||||||
fd = open(argv[i], O_RDONLY);
|
} else {
|
||||||
if (fd < 0)
|
if (strbuf_read_file(&buf, argv[i], 1024) < 0)
|
||||||
die("could not open '%s': %s",
|
die("could not open or read '%s': %s",
|
||||||
argv[i], strerror(errno));
|
argv[i], strerror(errno));
|
||||||
}
|
}
|
||||||
if (strbuf_read(&buf, fd, 1024) < 0) {
|
|
||||||
die("cannot read %s", argv[i]);
|
|
||||||
}
|
|
||||||
message = 1;
|
message = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
4
strbuf.c
4
strbuf.c
@ -186,14 +186,14 @@ int strbuf_getline(struct strbuf *sb, FILE *fp, int term)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int strbuf_read_file(struct strbuf *sb, const char *path)
|
int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint)
|
||||||
{
|
{
|
||||||
int fd, len;
|
int fd, len;
|
||||||
|
|
||||||
fd = open(path, O_RDONLY);
|
fd = open(path, O_RDONLY);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return -1;
|
return -1;
|
||||||
len = strbuf_read(sb, fd, 0);
|
len = strbuf_read(sb, fd, hint);
|
||||||
close(fd);
|
close(fd);
|
||||||
if (len < 0)
|
if (len < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
2
strbuf.h
2
strbuf.h
@ -108,7 +108,7 @@ extern void strbuf_addf(struct strbuf *sb, const char *fmt, ...);
|
|||||||
extern size_t strbuf_fread(struct strbuf *, size_t, FILE *);
|
extern size_t strbuf_fread(struct strbuf *, size_t, FILE *);
|
||||||
/* XXX: if read fails, any partial read is undone */
|
/* XXX: if read fails, any partial read is undone */
|
||||||
extern ssize_t strbuf_read(struct strbuf *, int fd, size_t hint);
|
extern ssize_t strbuf_read(struct strbuf *, int fd, size_t hint);
|
||||||
extern int strbuf_read_file(struct strbuf *sb, const char *path);
|
extern int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint);
|
||||||
|
|
||||||
extern int strbuf_getline(struct strbuf *, FILE *, int);
|
extern int strbuf_getline(struct strbuf *, FILE *, int);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user