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>
This commit is contained in:
Jim Meyering 2009-09-12 10:54:32 +02:00 committed by Junio C Hamano
parent 511a3fc116
commit 2b7ca830c6
7 changed files with 14 additions and 9 deletions

View File

@ -454,7 +454,7 @@ static int quickfetch(struct ref *ref_map)
for (ref = ref_map; ref; ref = ref->next) { for (ref = ref_map; ref; ref = ref->next) {
if (write_in_full(revlist.in, sha1_to_hex(ref->old_sha1), 40) < 0 || if (write_in_full(revlist.in, sha1_to_hex(ref->old_sha1), 40) < 0 ||
write_in_full(revlist.in, "\n", 1) < 0) { write_str_in_full(revlist.in, "\n") < 0) {
if (errno != EPIPE && errno != EINVAL) if (errno != EPIPE && errno != EINVAL)
error("failed write to rev-list: %s", strerror(errno)); error("failed write to rev-list: %s", strerror(errno));
err = -1; err = -1;

View File

@ -362,7 +362,7 @@ static int expire_reflog(const char *ref, const unsigned char *sha1, int unused,
} else if (cmd->updateref && } else if (cmd->updateref &&
(write_in_full(lock->lock_fd, (write_in_full(lock->lock_fd,
sha1_to_hex(cb.last_kept_sha1), 40) != 40 || sha1_to_hex(cb.last_kept_sha1), 40) != 40 ||
write_in_full(lock->lock_fd, "\n", 1) != 1 || write_str_in_full(lock->lock_fd, "\n") != 1 ||
close_ref(lock) < 0)) { close_ref(lock) < 0)) {
status |= error("Couldn't write %s", status |= error("Couldn't write %s",
lock->lk->filename); lock->lk->filename);

View File

@ -923,13 +923,18 @@ extern const char *git_mailmap_file;
extern void maybe_flush_or_die(FILE *, const char *); extern void maybe_flush_or_die(FILE *, const char *);
extern int copy_fd(int ifd, int ofd); extern int copy_fd(int ifd, int ofd);
extern int copy_file(const char *dst, const char *src, int mode); extern int copy_file(const char *dst, const char *src, int mode);
extern ssize_t read_in_full(int fd, void *buf, size_t count);
extern ssize_t write_in_full(int fd, const void *buf, size_t count);
extern void write_or_die(int fd, const void *buf, size_t count); extern void write_or_die(int fd, const void *buf, size_t count);
extern int write_or_whine(int fd, const void *buf, size_t count, const char *msg); extern int write_or_whine(int fd, const void *buf, size_t count, const char *msg);
extern int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg); extern int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg);
extern void fsync_or_die(int fd, const char *); extern void fsync_or_die(int fd, const char *);
extern ssize_t read_in_full(int fd, void *buf, size_t count);
extern ssize_t write_in_full(int fd, const void *buf, size_t count);
static inline ssize_t write_str_in_full(int fd, const char *str)
{
return write_in_full(fd, str, strlen(str));
}
/* pager.c */ /* pager.c */
extern void setup_pager(void); extern void setup_pager(void);
extern const char *pager_program; extern const char *pager_program;

View File

@ -212,7 +212,7 @@ int write_shallow_commits(int fd, int use_pack_protocol)
else { else {
if (write_in_full(fd, hex, 40) != 40) if (write_in_full(fd, hex, 40) != 40)
break; break;
if (write_in_full(fd, "\n", 1) != 1) if (write_str_in_full(fd, "\n") != 1)
break; break;
} }
} }

View File

@ -1116,7 +1116,7 @@ int git_config_set_multivar(const char *key, const char *value,
copy_end - copy_begin) copy_end - copy_begin)
goto write_err_out; goto write_err_out;
if (new_line && if (new_line &&
write_in_full(fd, "\n", 1) != 1) write_str_in_full(fd, "\n") != 1)
goto write_err_out; goto write_err_out;
} }
copy_begin = store.offset[i]; copy_begin = store.offset[i];

View File

@ -61,7 +61,7 @@ static int write_rr(struct string_list *rr, int out_fd)
path = rr->items[i].string; path = rr->items[i].string;
length = strlen(path) + 1; length = strlen(path) + 1;
if (write_in_full(out_fd, rr->items[i].util, 40) != 40 || if (write_in_full(out_fd, rr->items[i].util, 40) != 40 ||
write_in_full(out_fd, "\t", 1) != 1 || write_str_in_full(out_fd, "\t") != 1 ||
write_in_full(out_fd, path, length) != length) write_in_full(out_fd, path, length) != length)
die("unable to write rerere record"); die("unable to write rerere record");
} }

View File

@ -553,7 +553,7 @@ static void receive_needs(void)
shallow_nr = 0; shallow_nr = 0;
if (debug_fd) if (debug_fd)
write_in_full(debug_fd, "#S\n", 3); write_str_in_full(debug_fd, "#S\n");
for (;;) { for (;;) {
struct object *o; struct object *o;
unsigned char sha1_buf[20]; unsigned char sha1_buf[20];
@ -619,7 +619,7 @@ static void receive_needs(void)
} }
} }
if (debug_fd) if (debug_fd)
write_in_full(debug_fd, "#E\n", 3); write_str_in_full(debug_fd, "#E\n");
if (!use_sideband && daemon_mode) if (!use_sideband && daemon_mode)
no_progress = 1; no_progress = 1;