@matheusbsbs / matheus-bagliano / commits / 2b7ca830c6
Fork 0

use write_str_in_full helper to avoid literal string lengths

In 2d14d65 (Use a clearer style to issue commands to remote helpers, 2009-09-03) I happened to notice two changes like this: - write_in_full(helper->in, "list\n", 5); + + strbuf_addstr(&buf, "list\n"); + write_in_full(helper->in, buf.buf, buf.len); + strbuf_reset(&buf); IMHO, it would be better to define a new function, static inline ssize_t write_str_in_full(int fd, const char *str) { return write_in_full(fd, str, strlen(str)); } and then use it like this: - strbuf_addstr(&buf, "list\n"); - write_in_full(helper->in, buf.buf, buf.len); - strbuf_reset(&buf); + write_str_in_full(helper->in, "list\n"); Thus not requiring the added allocation, and still avoiding the maintenance risk of literal string lengths. These days, compilers are good enough that strlen("literal") imposes no run-time cost. Transformed via this: perl -pi -e \ 's/write_in_full\((.*?), (".*?"), \d+\)/write_str_in_full($1, $2)/'\ $(git grep -l 'write_in_full.*"') Signed-off-by: Jim Meyering <meyering@redhat.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jim Meyering committed Sep 12, 2009 at 10:54 UTC 2b7ca830c6a6e4f0e1722e24973a026b5b867227
7 files changed +14 -9
builtin-fetch.c
+1 -1
@@ -454,7 +454,7 @@ static int quickfetch(struct ref *ref_map)
454
455 for (ref = ref_map; ref; ref = ref->next) {
456 if (write_in_full(revlist.in, sha1_to_hex(ref->old_sha1), 40) < 0 ||
457 - write_in_full(revlist.in, "\n", 1) < 0) {
457 + write_str_in_full(revlist.in, "\n") < 0) {
458 if (errno != EPIPE && errno != EINVAL)
459 error("failed write to rev-list: %s", strerror(errno));
460 err = -1;
builtin-reflog.c
+1 -1
@@ -362,7 +362,7 @@ static int expire_reflog(const char *ref, const unsigned char *sha1, int unused,
362 } else if (cmd->updateref &&
363 (write_in_full(lock->lock_fd,
364 sha1_to_hex(cb.last_kept_sha1), 40) != 40 ||
365 - write_in_full(lock->lock_fd, "\n", 1) != 1 ||
365 + write_str_in_full(lock->lock_fd, "\n") != 1 ||
366 close_ref(lock) < 0)) {
367 status |= error("Couldn't write %s",
368 lock->lk->filename);
cache.h
+7 -2
@@ -923,13 +923,18 @@ extern const char *git_mailmap_file;
923 extern void maybe_flush_or_die(FILE *, const char *);
924 extern int copy_fd(int ifd, int ofd);
925 extern int copy_file(const char *dst, const char *src, int mode);
926 -extern ssize_t read_in_full(int fd, void *buf, size_t count);
927 -extern ssize_t write_in_full(int fd, const void *buf, size_t count);
926 extern void write_or_die(int fd, const void *buf, size_t count);
927 extern int write_or_whine(int fd, const void *buf, size_t count, const char *msg);
928 extern int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg);
929 extern void fsync_or_die(int fd, const char *);
930
931 +extern ssize_t read_in_full(int fd, void *buf, size_t count);
932 +extern ssize_t write_in_full(int fd, const void *buf, size_t count);
933 +static inline ssize_t write_str_in_full(int fd, const char *str)
934 +{
935 + return write_in_full(fd, str, strlen(str));
936 +}
937 +
938 /* pager.c */
939 extern void setup_pager(void);
940 extern const char *pager_program;
commit.c
+1 -1
@@ -212,7 +212,7 @@ int write_shallow_commits(int fd, int use_pack_protocol)
212 else {
213 if (write_in_full(fd, hex, 40) != 40)
214 break;
215 - if (write_in_full(fd, "\n", 1) != 1)
215 + if (write_str_in_full(fd, "\n") != 1)
216 break;
217 }
218 }
config.c
+1 -1
@@ -1116,7 +1116,7 @@ int git_config_set_multivar(const char *key, const char *value,
1116 copy_end - copy_begin)
1117 goto write_err_out;
1118 if (new_line &&
1119 - write_in_full(fd, "\n", 1) != 1)
1119 + write_str_in_full(fd, "\n") != 1)
1120 goto write_err_out;
1121 }
1122 copy_begin = store.offset[i];
rerere.c
+1 -1
@@ -61,7 +61,7 @@ static int write_rr(struct string_list *rr, int out_fd)
61 path = rr->items[i].string;
62 length = strlen(path) + 1;
63 if (write_in_full(out_fd, rr->items[i].util, 40) != 40 ||
64 - write_in_full(out_fd, "\t", 1) != 1 ||
64 + write_str_in_full(out_fd, "\t") != 1 ||
65 write_in_full(out_fd, path, length) != length)
66 die("unable to write rerere record");
67 }
upload-pack.c
+2 -2
@@ -553,7 +553,7 @@ static void receive_needs(void)
553
554 shallow_nr = 0;
555 if (debug_fd)
556 - write_in_full(debug_fd, "#S\n", 3);
556 + write_str_in_full(debug_fd, "#S\n");
557 for (;;) {
558 struct object *o;
559 unsigned char sha1_buf[20];
@@ -619,7 +619,7 @@ static void receive_needs(void)
619 }
620 }
621 if (debug_fd)
622 - write_in_full(debug_fd, "#E\n", 3);
622 + write_str_in_full(debug_fd, "#E\n");
623
624 if (!use_sideband && daemon_mode)
625 no_progress = 1;