{"thread":{"id":"10048","subject":"[PATCH] strbuf_read_file enhancement, and use it.","startedAt":"2007-09-27T13:25:55Z","lastAt":"2007-09-27T13:36:09Z","messageCount":2,"participants":["Pierre Habouzit"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"54169","messageId":"20070927133944.55B4BDC10@madism.org","threadId":"10048","inReplyTo":"20070927133609.GJ10289@artemis.corp","subject":"[PATCH] strbuf_read_file enhancement, and use it.","fromName":"Pierre Habouzit","fromEmail":"madcoder@debian.org","sentAt":"2007-09-27T13:25:55Z","receivedAt":"2007-09-27T13:25:55Z","isPatch":true,"sender":{"key":"madcoder@debian.org","avatar":"https://avatars.githubusercontent.com/u/44708?v=4"},"body":"* make strbuf_read_file take a size hint (works like strbuf_read)\n* use it in a couple of places.\n\nSigned-off-by: Pierre Habouzit <madcoder@debian.org>\n---\n\n oh boy, once again I sent a half baked patch. okay, I'll stop for today :/\n strbuf_read_file returns 0 or -1, not the size read.\n\n builtin-apply.c |   12 ++----------\n builtin-blame.c |    8 ++------\n builtin-tag.c   |   19 +++++++------------\n strbuf.c        |    4 ++--\n strbuf.h        |    2 +-\n 5 files changed, 14 insertions(+), 31 deletions(-)\n\ndiff --git a/builtin-apply.c b/builtin-apply.c\nindex 1f0a672..65447a1 100644\n--- a/builtin-apply.c\n+++ b/builtin-apply.c\n@@ -1421,8 +1421,6 @@ static void show_stats(struct patch *patch)\n \n static int read_old_data(struct stat *st, const char *path, struct strbuf *buf)\n {\n-\tint fd;\n-\n \tswitch (st->st_mode & S_IFMT) {\n \tcase S_IFLNK:\n \t\tstrbuf_grow(buf, st->st_size);\n@@ -1431,14 +1429,8 @@ static int read_old_data(struct stat *st, const char *path, struct strbuf *buf)\n \t\tstrbuf_setlen(buf, st->st_size);\n \t\treturn 0;\n \tcase S_IFREG:\n-\t\tfd = open(path, O_RDONLY);\n-\t\tif (fd < 0)\n-\t\t\treturn error(\"unable to open %s\", path);\n-\t\tif (strbuf_read(buf, fd, st->st_size) < 0) {\n-\t\t\tclose(fd);\n-\t\t\treturn -1;\n-\t\t}\n-\t\tclose(fd);\n+\t\tif (strbuf_read_file(buf, path, st->st_size) < 0)\n+\t\t\treturn error(\"unable to open or read %s\", path);\n \t\tconvert_to_git(path, buf->buf, buf->len, buf);\n \t\treturn 0;\n \tdefault:\ndiff --git a/builtin-blame.c b/builtin-blame.c\nindex 16c0ca8..099c363 100644\n--- a/builtin-blame.c\n+++ b/builtin-blame.c\n@@ -2002,7 +2002,6 @@ static struct commit *fake_working_tree_commit(const char *path, const char *con\n \tunsigned char head_sha1[20];\n \tstruct strbuf buf;\n \tconst char *ident;\n-\tint fd;\n \ttime_t now;\n \tint size, len;\n \tstruct cache_entry *ce;\n@@ -2041,11 +2040,8 @@ static struct commit *fake_working_tree_commit(const char *path, const char *con\n \t\tmode = canon_mode(st.st_mode);\n \t\tswitch (st.st_mode & S_IFMT) {\n \t\tcase S_IFREG:\n-\t\t\tfd = open(read_from, O_RDONLY);\n-\t\t\tif (fd < 0)\n-\t\t\t\tdie(\"cannot open %s\", read_from);\n-\t\t\tif (strbuf_read(&buf, fd, 0) != xsize_t(st.st_size))\n-\t\t\t\tdie(\"cannot read %s\", read_from);\n+\t\t\tif (strbuf_read_file(&buf, read_from, st.st_size) < 0)\n+\t\t\t\tdie(\"cannot open or read %s\", read_from);\n \t\t\tbreak;\n \t\tcase S_IFLNK:\n \t\t\tif (readlink(read_from, buf.buf, buf.alloc) != fin_size)\ndiff --git a/builtin-tag.c b/builtin-tag.c\nindex 6132cac..66e5a58 100644\n--- a/builtin-tag.c\n+++ b/builtin-tag.c\n@@ -51,7 +51,7 @@ static void launch_editor(const char *path, struct strbuf *buffer)\n \tif (run_command(&child))\n \t\tdie(\"There was a problem with the editor %s.\", editor);\n \n-\tif (strbuf_read_file(buffer, path) < 0)\n+\tif (strbuf_read_file(buffer, path, 0) < 0)\n \t\tdie(\"could not read message file '%s': %s\",\n \t\t    path, strerror(errno));\n }\n@@ -356,8 +356,6 @@ int cmd_tag(int argc, const char **argv, const char *prefix)\n \t\t\tcontinue;\n \t\t}\n \t\tif (!strcmp(arg, \"-F\")) {\n-\t\t\tint fd;\n-\n \t\t\tannotate = 1;\n \t\t\ti++;\n \t\t\tif (i == argc)\n@@ -365,17 +363,14 @@ int cmd_tag(int argc, const char **argv, const char *prefix)\n \t\t\tif (message)\n \t\t\t\tdie(\"only one -F or -m option is allowed.\");\n \n-\t\t\tif (!strcmp(argv[i], \"-\"))\n-\t\t\t\tfd = 0;\n-\t\t\telse {\n-\t\t\t\tfd = open(argv[i], O_RDONLY);\n-\t\t\t\tif (fd < 0)\n-\t\t\t\t\tdie(\"could not open '%s': %s\",\n+\t\t\tif (!strcmp(argv[i], \"-\")) {\n+\t\t\t\tif (strbuf_read(&buf, 0, 1024) < 0)\n+\t\t\t\t\tdie(\"cannot read %s\", argv[i]);\n+\t\t\t} else {\n+\t\t\t\tif (strbuf_read_file(&buf, argv[i], 1024) < 0)\n+\t\t\t\t\tdie(\"could not open or read '%s': %s\",\n \t\t\t\t\t\targv[i], strerror(errno));\n \t\t\t}\n-\t\t\tif (strbuf_read(&buf, fd, 1024) < 0) {\n-\t\t\t\tdie(\"cannot read %s\", argv[i]);\n-\t\t\t}\n \t\t\tmessage = 1;\n \t\t\tcontinue;\n \t\t}\ndiff --git a/strbuf.c b/strbuf.c\nindex 910acd0..5cac01e 100644\n--- a/strbuf.c\n+++ b/strbuf.c\n@@ -183,14 +183,14 @@ int strbuf_getline(struct strbuf *sb, FILE *fp, int term)\n \treturn 0;\n }\n \n-int strbuf_read_file(struct strbuf *sb, const char *path)\n+int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint)\n {\n \tint fd, len;\n \n \tfd = open(path, O_RDONLY);\n \tif (fd < 0)\n \t\treturn -1;\n-\tlen = strbuf_read(sb, fd, 0);\n+\tlen = strbuf_read(sb, fd, hint);\n \tclose(fd);\n \tif (len < 0)\n \t\treturn -1;\ndiff --git a/strbuf.h b/strbuf.h\nindex 6deec78..9b9e861 100644\n--- a/strbuf.h\n+++ b/strbuf.h\n@@ -108,7 +108,7 @@ extern void strbuf_addf(struct strbuf *sb, const char *fmt, ...);\n extern size_t strbuf_fread(struct strbuf *, size_t, FILE *);\n /* XXX: if read fails, any partial read is undone */\n extern ssize_t strbuf_read(struct strbuf *, int fd, size_t hint);\n-extern int strbuf_read_file(struct strbuf *sb, const char *path);\n+extern int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint);\n \n extern int strbuf_getline(struct strbuf *, FILE *, int);\n \n-- \n1.5.3.2.1110.gba7d6\n"},{"id":"54168","messageId":"20070927133609.GJ10289@artemis.corp","threadId":"10048","inReplyTo":null,"subject":"[PATCH] strbuf_read_file enhancement, and use it.","fromName":"Pierre Habouzit","fromEmail":"madcoder@debian.org","sentAt":"2007-09-27T13:36:09Z","receivedAt":"2007-09-27T13:36:09Z","isPatch":true,"sender":{"key":"madcoder@debian.org","avatar":"https://avatars.githubusercontent.com/u/44708?v=4"},"body":"* make strbuf_read_file take a size hint (works like strbuf_read)\n* use it in a couple of places.\n\nSigned-off-by: Pierre Habouzit <madcoder@debian.org>\n---\n\nI just noticed someone introduced a nice strbuf_read_file API, so here is\na patch that diverts this nice idea to simplify git further.\n\n builtin-apply.c |   12 ++----------\n builtin-blame.c |    8 ++------\n builtin-tag.c   |   19 +++++++------------\n strbuf.c        |    4 ++--\n strbuf.h        |    2 +-\n 5 files changed, 14 insertions(+), 31 deletions(-)\n\ndiff --git a/builtin-apply.c b/builtin-apply.c\nindex 1f0a672..047a60d 100644\n--- a/builtin-apply.c\n+++ b/builtin-apply.c\n@@ -1421,8 +1421,6 @@ static void show_stats(struct patch *patch)\n \n static int read_old_data(struct stat *st, const char *path, struct strbuf *buf)\n {\n-\tint fd;\n-\n \tswitch (st->st_mode & S_IFMT) {\n \tcase S_IFLNK:\n \t\tstrbuf_grow(buf, st->st_size);\n@@ -1431,14 +1429,8 @@ static int read_old_data(struct stat *st, const char *path, struct strbuf *buf)\n \t\tstrbuf_setlen(buf, st->st_size);\n \t\treturn 0;\n \tcase S_IFREG:\n-\t\tfd = open(path, O_RDONLY);\n-\t\tif (fd < 0)\n-\t\t\treturn error(\"unable to open %s\", path);\n-\t\tif (strbuf_read(buf, fd, st->st_size) < 0) {\n-\t\t\tclose(fd);\n-\t\t\treturn -1;\n-\t\t}\n-\t\tclose(fd);\n+\t\tif (strbuf_read_file(buf, path, st->st_size) != st->st_size)\n+\t\t\treturn error(\"unable to open or read %s\", path);\n \t\tconvert_to_git(path, buf->buf, buf->len, buf);\n \t\treturn 0;\n \tdefault:\ndiff --git a/builtin-blame.c b/builtin-blame.c\nindex 16c0ca8..e3112a2 100644\n--- a/builtin-blame.c\n+++ b/builtin-blame.c\n@@ -2002,7 +2002,6 @@ static struct commit *fake_working_tree_commit(const char *path, const char *con\n \tunsigned char head_sha1[20];\n \tstruct strbuf buf;\n \tconst char *ident;\n-\tint fd;\n \ttime_t now;\n \tint size, len;\n \tstruct cache_entry *ce;\n@@ -2041,11 +2040,8 @@ static struct commit *fake_working_tree_commit(const char *path, const char *con\n \t\tmode = canon_mode(st.st_mode);\n \t\tswitch (st.st_mode & S_IFMT) {\n \t\tcase S_IFREG:\n-\t\t\tfd = open(read_from, O_RDONLY);\n-\t\t\tif (fd < 0)\n-\t\t\t\tdie(\"cannot open %s\", read_from);\n-\t\t\tif (strbuf_read(&buf, fd, 0) != xsize_t(st.st_size))\n-\t\t\t\tdie(\"cannot read %s\", read_from);\n+\t\t\tif (strbuf_read_file(&buf, read_from, st.st_size) != st.st_size)\n+\t\t\t\tdie(\"cannot open or read %s\", read_from);\n \t\t\tbreak;\n \t\tcase S_IFLNK:\n \t\t\tif (readlink(read_from, buf.buf, buf.alloc) != fin_size)\ndiff --git a/builtin-tag.c b/builtin-tag.c\nindex 6132cac..66e5a58 100644\n--- a/builtin-tag.c\n+++ b/builtin-tag.c\n@@ -51,7 +51,7 @@ static void launch_editor(const char *path, struct strbuf *buffer)\n \tif (run_command(&child))\n \t\tdie(\"There was a problem with the editor %s.\", editor);\n \n-\tif (strbuf_read_file(buffer, path) < 0)\n+\tif (strbuf_read_file(buffer, path, 0) < 0)\n \t\tdie(\"could not read message file '%s': %s\",\n \t\t    path, strerror(errno));\n }\n@@ -356,8 +356,6 @@ int cmd_tag(int argc, const char **argv, const char *prefix)\n \t\t\tcontinue;\n \t\t}\n \t\tif (!strcmp(arg, \"-F\")) {\n-\t\t\tint fd;\n-\n \t\t\tannotate = 1;\n \t\t\ti++;\n \t\t\tif (i == argc)\n@@ -365,17 +363,14 @@ int cmd_tag(int argc, const char **argv, const char *prefix)\n \t\t\tif (message)\n \t\t\t\tdie(\"only one -F or -m option is allowed.\");\n \n-\t\t\tif (!strcmp(argv[i], \"-\"))\n-\t\t\t\tfd = 0;\n-\t\t\telse {\n-\t\t\t\tfd = open(argv[i], O_RDONLY);\n-\t\t\t\tif (fd < 0)\n-\t\t\t\t\tdie(\"could not open '%s': %s\",\n+\t\t\tif (!strcmp(argv[i], \"-\")) {\n+\t\t\t\tif (strbuf_read(&buf, 0, 1024) < 0)\n+\t\t\t\t\tdie(\"cannot read %s\", argv[i]);\n+\t\t\t} else {\n+\t\t\t\tif (strbuf_read_file(&buf, argv[i], 1024) < 0)\n+\t\t\t\t\tdie(\"could not open or read '%s': %s\",\n \t\t\t\t\t\targv[i], strerror(errno));\n \t\t\t}\n-\t\t\tif (strbuf_read(&buf, fd, 1024) < 0) {\n-\t\t\t\tdie(\"cannot read %s\", argv[i]);\n-\t\t\t}\n \t\t\tmessage = 1;\n \t\t\tcontinue;\n \t\t}\ndiff --git a/strbuf.c b/strbuf.c\nindex 910acd0..5cac01e 100644\n--- a/strbuf.c\n+++ b/strbuf.c\n@@ -183,14 +183,14 @@ int strbuf_getline(struct strbuf *sb, FILE *fp, int term)\n \treturn 0;\n }\n \n-int strbuf_read_file(struct strbuf *sb, const char *path)\n+int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint)\n {\n \tint fd, len;\n \n \tfd = open(path, O_RDONLY);\n \tif (fd < 0)\n \t\treturn -1;\n-\tlen = strbuf_read(sb, fd, 0);\n+\tlen = strbuf_read(sb, fd, hint);\n \tclose(fd);\n \tif (len < 0)\n \t\treturn -1;\ndiff --git a/strbuf.h b/strbuf.h\nindex 6deec78..9b9e861 100644\n--- a/strbuf.h\n+++ b/strbuf.h\n@@ -108,7 +108,7 @@ extern void strbuf_addf(struct strbuf *sb, const char *fmt, ...);\n extern size_t strbuf_fread(struct strbuf *, size_t, FILE *);\n /* XXX: if read fails, any partial read is undone */\n extern ssize_t strbuf_read(struct strbuf *, int fd, size_t hint);\n-extern int strbuf_read_file(struct strbuf *sb, const char *path);\n+extern int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint);\n \n extern int strbuf_getline(struct strbuf *, FILE *, int);\n \n-- \n1.5.3.2.1110.gba7d6\n"}]}