@@ -494,11 +494,12 @@ static int get_head_names(const struct ref *remote_refs, struct ref_states *stat
struct ref *ref, *matches;
struct ref *fetch_map = NULL, **fetch_map_tail = &fetch_map;
struct refspec_item refspec;
+ char refspec_str[] = "refs/heads/*";
memset(&refspec, 0, sizeof(refspec));
refspec.force = 0;
refspec.pattern = 1;
- refspec.src = refspec.dst = "refs/heads/*";
+ refspec.src = refspec.dst = refspec_str;
get_fetch_map(remote_refs, &refspec, &fetch_map_tail, 0);
matches = guess_remote_head(find_ref_by_name(remote_refs, "HEAD"),
fetch_map, 1);
@@ -7231,11 +7231,12 @@ size_t fill_textconv(struct repository *r,
struct diff_filespec *df,
char **outbuf)
{
+ static char empty_str[] = "";
size_t size;
if (!driver) {
if (!DIFF_FILE_VALID(df)) {
- *outbuf = "";
+ *outbuf = empty_str;
return 0;
}
if (diff_populate_filespec(r, df, NULL))
@@ -175,6 +175,7 @@ int finish_delayed_checkout(struct checkout *state, int show_progress)
struct string_list_item *filter, *path;
struct progress *progress = NULL;
struct delayed_checkout *dco = state->delayed_checkout;
+ char empty_str[] = "";
if (!state->delayed_checkout)
return errs;
@@ -189,7 +190,7 @@ int finish_delayed_checkout(struct checkout *state, int show_progress)
if (!async_query_available_blobs(filter->string, &available_paths)) {
/* Filter reported an error */
errs = 1;
- filter->string = "";
+ filter->string = empty_str;
continue;
}
if (available_paths.nr <= 0) {
@@ -199,7 +200,7 @@ int finish_delayed_checkout(struct checkout *state, int show_progress)
* filter from the list (see
* "string_list_remove_empty_items" call below).
*/
- filter->string = "";
+ filter->string = empty_str;
continue;
}
@@ -225,7 +226,7 @@ int finish_delayed_checkout(struct checkout *state, int show_progress)
* Do not ask the filter for available blobs,
* again, as the filter is likely buggy.
*/
- filter->string = "";
+ filter->string = empty_str;
continue;
}
ce = index_file_exists(state->istate, path->string,
@@ -46,9 +46,14 @@ static struct passwd *xgetpwuid_self(int *is_bogus)
pw = getpwuid(getuid());
if (!pw) {
static struct passwd fallback;
- fallback.pw_name = "unknown";
+ static char fallback_name[] = "unknown";
#ifndef NO_GECOS_IN_PWENT
- fallback.pw_gecos = "Unknown";
+ static char fallback_gcos[] = "Unknown";
+#endif
+
+ fallback.pw_name = fallback_name;
+#ifndef NO_GECOS_IN_PWENT
+ fallback.pw_gecos = fallback_gcos;
#endif
pw = &fallback;
if (is_bogus)
@@ -1032,6 +1032,7 @@ static int process_diff_filepair(struct rev_info *rev,
struct range_set tmp;
struct diff_ranges diff;
mmfile_t file_parent, file_target;
+ char empty_str[] = "";
assert(pair->two->path);
while (rg) {
@@ -1056,7 +1057,7 @@ static int process_diff_filepair(struct rev_info *rev,
file_parent.ptr = pair->one->data;
file_parent.size = pair->one->size;
} else {
- file_parent.ptr = "";
+ file_parent.ptr = empty_str;
file_parent.size = 0;
}
@@ -282,12 +282,13 @@ static struct cached_object {
} *cached_objects;
static int cached_object_nr, cached_object_alloc;
+static char empty_tree_buf[] = "";
static struct cached_object empty_tree = {
.oid = {
.hash = EMPTY_TREE_SHA1_BIN_LITERAL,
},
.type = OBJ_TREE,
- .buf = "",
+ .buf = empty_tree_buf,
};
static struct cached_object *find_cached_object(const struct object_id *oid)
@@ -1583,9 +1583,10 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
return 1;
case 'D':
{
+ char empty_str[] = "";
const struct decoration_options opts = {
- .prefix = "",
- .suffix = ""
+ .prefix = empty_str,
+ .suffix = empty_str,
};
format_decorations(sb, commit, c->auto_color, &opts);
@@ -1285,6 +1285,7 @@ static int write_copy_table(struct reftable_writer *writer, void *cb_data)
struct strbuf errbuf = STRBUF_INIT;
size_t logs_nr = 0, logs_alloc = 0, i;
const char *committer_info;
+ char head[] = "HEAD";
int ret;
committer_info = git_committer_info(0);
@@ -1387,7 +1388,7 @@ static int write_copy_table(struct reftable_writer *writer, void *cb_data)
if (append_head_reflog) {
ALLOC_GROW(logs, logs_nr + 1, logs_alloc);
logs[logs_nr] = logs[logs_nr - 1];
- logs[logs_nr].refname = "HEAD";
+ logs[logs_nr].refname = head;
logs_nr++;
}
}
@@ -1463,7 +1464,7 @@ static int write_copy_table(struct reftable_writer *writer, void *cb_data)
string_list_clear(&skip, 0);
strbuf_release(&errbuf);
for (i = 0; i < logs_nr; i++) {
- if (!strcmp(logs[i].refname, "HEAD"))
+ if (logs[i].refname == head)
continue;
logs[i].refname = NULL;
reftable_log_record_release(&logs[i]);
@@ -58,8 +58,9 @@ static void test_binsearch(void)
static void test_names_length(void)
{
- char *a[] = { "a", "b", NULL };
- EXPECT(names_length(a) == 2);
+ char a[] = "a", b[] = "b";
+ char *names[] = { a, b, NULL };
+ EXPECT(names_length(names) == 2);
}
static void test_parse_names_normal(void)
@@ -19,7 +19,7 @@ license that can be found in the LICENSE file or at
static void test_block_read_write(void)
{
const int header_off = 21; /* random */
- char *names[30];
+ char *names[30], empty_str[] = "";
const int N = ARRAY_SIZE(names);
const int block_size = 1024;
struct reftable_block block = { NULL };
@@ -42,7 +42,7 @@ static void test_block_read_write(void)
block_writer_init(&bw, BLOCK_TYPE_REF, block.data, block_size,
header_off, hash_size(GIT_SHA1_FORMAT_ID));
- rec.u.ref.refname = "";
+ rec.u.ref.refname = empty_str;
rec.u.ref.value_type = REFTABLE_REF_DELETION;
n = block_writer_add(&bw, &rec);
EXPECT(n == REFTABLE_API_ERROR);
@@ -123,14 +123,15 @@ static void readers_destroy(struct reftable_reader **readers, size_t n)
static void test_merged_between(void)
{
+ char a[] = "a", b[] = "b";
struct reftable_ref_record r1[] = { {
- .refname = "b",
+ .refname = b,
.update_index = 1,
.value_type = REFTABLE_REF_VAL1,
.value.val1 = { 1, 2, 3, 0 },
} };
struct reftable_ref_record r2[] = { {
- .refname = "a",
+ .refname = a,
.update_index = 2,
.value_type = REFTABLE_REF_DELETION,
} };
@@ -163,40 +164,41 @@ static void test_merged_between(void)
static void test_merged(void)
{
+ char a[] = "a", b[] = "b", c[] = "c", d[] = "d";
struct reftable_ref_record r1[] = {
{
- .refname = "a",
+ .refname = a,
.update_index = 1,
.value_type = REFTABLE_REF_VAL1,
.value.val1 = { 1 },
},
{
- .refname = "b",
+ .refname = b,
.update_index = 1,
.value_type = REFTABLE_REF_VAL1,
.value.val1 = { 1 },
},
{
- .refname = "c",
+ .refname = c,
.update_index = 1,
.value_type = REFTABLE_REF_VAL1,
.value.val1 = { 1 },
}
};
struct reftable_ref_record r2[] = { {
- .refname = "a",
+ .refname = a,
.update_index = 2,
.value_type = REFTABLE_REF_DELETION,
} };
struct reftable_ref_record r3[] = {
{
- .refname = "c",
+ .refname = c,
.update_index = 3,
.value_type = REFTABLE_REF_VAL1,
.value.val1 = { 2 },
},
{
- .refname = "d",
+ .refname = d,
.update_index = 3,
.value_type = REFTABLE_REF_VAL1,
.value.val1 = { 1 },
@@ -289,48 +291,52 @@ merged_table_from_log_records(struct reftable_log_record **logs,
static void test_merged_logs(void)
{
+ char a[] = "a";
+ char name[] = "jane doe", email[] = "jane@invalid";
+ char message1[] = "message1", message2[] = "message2";
+ char message3[] = "message3";
struct reftable_log_record r1[] = {
{
- .refname = "a",
+ .refname = a,
.update_index = 2,
.value_type = REFTABLE_LOG_UPDATE,
.value.update = {
.old_hash = { 2 },
/* deletion */
- .name = "jane doe",
- .email = "jane@invalid",
- .message = "message2",
+ .name = name,
+ .email = email,
+ .message = message2,
}
},
{
- .refname = "a",
+ .refname = a,
.update_index = 1,
.value_type = REFTABLE_LOG_UPDATE,
.value.update = {
.old_hash = { 1 },
.new_hash = { 2 },
- .name = "jane doe",
- .email = "jane@invalid",
- .message = "message1",
+ .name = name,
+ .email = email,
+ .message = message1,
}
},
};
struct reftable_log_record r2[] = {
{
- .refname = "a",
+ .refname = a,
.update_index = 3,
.value_type = REFTABLE_LOG_UPDATE,
.value.update = {
.new_hash = { 3 },
- .name = "jane doe",
- .email = "jane@invalid",
- .message = "message3",
+ .name = name,
+ .email = email,
+ .message = message3,
}
},
};
struct reftable_log_record r3[] = {
{
- .refname = "a",
+ .refname = a,
.update_index = 2,
.value_type = REFTABLE_LOG_DELETION,
},
@@ -400,13 +406,13 @@ static void test_merged_logs(void)
static void test_default_write_opts(void)
{
+ char master[] = "master";
struct reftable_write_options opts = { 0 };
struct strbuf buf = STRBUF_INIT;
struct reftable_writer *w =
reftable_new_writer(&strbuf_add_void, &noop_flush, &buf, &opts);
-
struct reftable_ref_record rec = {
- .refname = "master",
+ .refname = master,
.update_index = 1,
};
int err;
@@ -56,6 +56,7 @@ static void write_table(char ***names, struct strbuf *buf, int N,
int i = 0, n;
struct reftable_log_record log = { NULL };
const struct reftable_stats *stats = NULL;
+ char message[] = "message";
REFTABLE_CALLOC_ARRAY(*names, N + 1);
@@ -86,7 +87,7 @@ static void write_table(char ***names, struct strbuf *buf, int N,
log.update_index = update_index;
log.value_type = REFTABLE_LOG_UPDATE;
set_test_hash(log.value.update.new_hash, i);
- log.value.update.message = "message";
+ log.value.update.message = message;
n = reftable_writer_add_log(w, &log);
EXPECT(n == 0);
@@ -111,23 +112,28 @@ static void write_table(char ***names, struct strbuf *buf, int N,
static void test_log_buffer_size(void)
{
+ char refname[] = "refs/heads/master";
+ char name[] = "Han-Wen Hienhuys";
+ char email[] = "hanwen@google.com";
+ char message[] = "commit: 9\n";
struct strbuf buf = STRBUF_INIT;
struct reftable_write_options opts = {
.block_size = 4096,
};
int err;
int i;
- struct reftable_log_record
- log = { .refname = "refs/heads/master",
- .update_index = 0xa,
- .value_type = REFTABLE_LOG_UPDATE,
- .value = { .update = {
- .name = "Han-Wen Nienhuys",
- .email = "hanwen@google.com",
- .tz_offset = 100,
- .time = 0x5e430672,
- .message = "commit: 9\n",
- } } };
+ struct reftable_log_record log = {
+ .refname = refname,
+ .update_index = 0xa,
+ .value_type = REFTABLE_LOG_UPDATE,
+ .value.update = {
+ .name = name,
+ .email = email,
+ .tz_offset = 100,
+ .time = 0x5e430672,
+ .message = message,
+ },
+ };
struct reftable_writer *w =
reftable_new_writer(&strbuf_add_void, &noop_flush, &buf, &opts);
@@ -149,6 +155,9 @@ static void test_log_buffer_size(void)
static void test_log_overflow(void)
{
+ char refname[] = "refs/heads/master";
+ char name[] = "Han-Wen Hienhuys";
+ char email[] = "hanwen@google.com";
struct strbuf buf = STRBUF_INIT;
char msg[256] = { 0 };
struct reftable_write_options opts = {
@@ -156,15 +165,15 @@ static void test_log_overflow(void)
};
int err;
struct reftable_log_record log = {
- .refname = "refs/heads/master",
+ .refname = refname,
.update_index = 0xa,
.value_type = REFTABLE_LOG_UPDATE,
.value = {
.update = {
.old_hash = { 1 },
.new_hash = { 2 },
- .name = "Han-Wen Nienhuys",
- .email = "hanwen@google.com",
+ .name = name,
+ .email = email,
.tz_offset = 100,
.time = 0x5e430672,
.message = msg,
@@ -290,17 +299,20 @@ static void test_log_zlib_corruption(void)
struct reftable_writer *w =
reftable_new_writer(&strbuf_add_void, &noop_flush, &buf, &opts);
const struct reftable_stats *stats = NULL;
+ char refname[] = "refname";
+ char name[] = "My Name";
+ char email[] = "myname@invalid";
char message[100] = { 0 };
int err, i, n;
struct reftable_log_record log = {
- .refname = "refname",
+ .refname = refname,
.value_type = REFTABLE_LOG_UPDATE,
.value = {
.update = {
.new_hash = { 1 },
.old_hash = { 2 },
- .name = "My Name",
- .email = "myname@invalid",
+ .name = name,
+ .email = email,
.message = message,
},
},
@@ -727,8 +739,9 @@ static void test_write_empty_key(void)
struct strbuf buf = STRBUF_INIT;
struct reftable_writer *w =
reftable_new_writer(&strbuf_add_void, &noop_flush, &buf, &opts);
+ char refname[] = "";
struct reftable_ref_record ref = {
- .refname = "",
+ .refname = refname,
.update_index = 1,
.value_type = REFTABLE_REF_DELETION,
};
@@ -750,20 +763,21 @@ static void test_write_key_order(void)
struct strbuf buf = STRBUF_INIT;
struct reftable_writer *w =
reftable_new_writer(&strbuf_add_void, &noop_flush, &buf, &opts);
+ char a[] = "a", b[] = "b", target[] = "target";
struct reftable_ref_record refs[2] = {
{
- .refname = "b",
+ .refname = b,
.update_index = 1,
.value_type = REFTABLE_REF_SYMREF,
.value = {
- .symref = "target",
+ .symref = target,
},
}, {
- .refname = "a",
+ .refname = a,
.update_index = 1,
.value_type = REFTABLE_REF_SYMREF,
.value = {
- .symref = "target",
+ .symref = target,
},
}
};
@@ -83,7 +83,7 @@ static void test_read_file(void)
char out[1024] = "line1\n\nline2\nline3";
int n, err;
char **names = NULL;
- char *want[] = { "line1", "line2", "line3" };
+ const char *want[] = { "line1", "line2", "line3" };
int i = 0;
EXPECT(fd > 0);
@@ -116,13 +116,14 @@ static void test_parse_names(void)
static void test_names_equal(void)
{
- char *a[] = { "a", "b", "c", NULL };
- char *b[] = { "a", "b", "d", NULL };
- char *c[] = { "a", "b", NULL };
-
- EXPECT(names_equal(a, a));
- EXPECT(!names_equal(a, b));
- EXPECT(!names_equal(a, c));
+ char a[] = "a", b[] = "b", c[] = "c", d[] = "d";
+ char *abc[] = { a, b, c, NULL };
+ char *abd[] = { a, b, d, NULL };
+ char *ab[] = { a, b, NULL };
+
+ EXPECT(names_equal(abc, abc));
+ EXPECT(!names_equal(abc, abd));
+ EXPECT(!names_equal(abc, ab));
}
static int write_test_ref(struct reftable_writer *wr, void *arg)
@@ -155,11 +156,12 @@ static void test_reftable_stack_add_one(void)
};
struct reftable_stack *st = NULL;
int err;
+ char head[] = "HEAD", master[] = "master";
struct reftable_ref_record ref = {
- .refname = "HEAD",
+ .refname = head,
.update_index = 1,
.value_type = REFTABLE_REF_SYMREF,
- .value.symref = "master",
+ .value.symref = master,
};
struct reftable_ref_record dest = { NULL };
struct stat stat_result = { 0 };
@@ -215,17 +217,18 @@ static void test_reftable_stack_uptodate(void)
char *dir = get_tmp_dir(__LINE__);
int err;
+ char head[] = "HEAD", branch2[] = "branch2", master[] = "master";
struct reftable_ref_record ref1 = {
- .refname = "HEAD",
+ .refname = head,
.update_index = 1,
.value_type = REFTABLE_REF_SYMREF,
- .value.symref = "master",
+ .value.symref = master,
};
struct reftable_ref_record ref2 = {
- .refname = "branch2",
+ .refname = branch2,
.update_index = 2,
.value_type = REFTABLE_REF_SYMREF,
- .value.symref = "master",
+ .value.symref = master,
};
@@ -262,12 +265,12 @@ static void test_reftable_stack_transaction_api(void)
struct reftable_stack *st = NULL;
int err;
struct reftable_addition *add = NULL;
-
+ char head[] = "HEAD", master[] = "master";
struct reftable_ref_record ref = {
- .refname = "HEAD",
+ .refname = head,
.update_index = 1,
.value_type = REFTABLE_REF_SYMREF,
- .value.symref = "master",
+ .value.symref = master,
};
struct reftable_ref_record dest = { NULL };
@@ -310,10 +313,11 @@ static void test_reftable_stack_transaction_api_performs_auto_compaction(void)
EXPECT_ERR(err);
for (i = 0; i <= n; i++) {
+ char master[] = "master";
struct reftable_ref_record ref = {
.update_index = reftable_stack_next_update_index(st),
.value_type = REFTABLE_REF_SYMREF,
- .value.symref = "master",
+ .value.symref = master,
};
char name[100];
@@ -355,8 +359,9 @@ static void test_reftable_stack_transaction_api_performs_auto_compaction(void)
static void test_reftable_stack_auto_compaction_fails_gracefully(void)
{
+ char master[] = "refs/meads/master";
struct reftable_ref_record ref = {
- .refname = "refs/heads/master",
+ .refname = master,
.update_index = 1,
.value_type = REFTABLE_REF_VAL1,
.value.val1 = {0x01},
@@ -404,21 +409,21 @@ static int write_error(struct reftable_writer *wr, void *arg)
static void test_reftable_stack_update_index_check(void)
{
char *dir = get_tmp_dir(__LINE__);
-
struct reftable_write_options cfg = { 0 };
struct reftable_stack *st = NULL;
int err;
+ char name1[] = "name1", name2[] = "name2", master[] = "master";
struct reftable_ref_record ref1 = {
- .refname = "name1",
+ .refname = name1,
.update_index = 1,
.value_type = REFTABLE_REF_SYMREF,
- .value.symref = "master",
+ .value.symref = master,
};
struct reftable_ref_record ref2 = {
- .refname = "name2",
+ .refname = name2,
.update_index = 1,
.value_type = REFTABLE_REF_SYMREF,
- .value.symref = "master",
+ .value.symref = master,
};
err = reftable_new_stack(&st, dir, cfg);
@@ -560,8 +565,12 @@ static void test_reftable_stack_log_normalize(void)
};
struct reftable_stack *st = NULL;
char *dir = get_tmp_dir(__LINE__);
+ char branch[] = "branch";
+ char onetwomessage[] = "one\ntwo";
+ char onemessage[] = "one";
+ char twomessage[] = "two\n";
struct reftable_log_record input = {
- .refname = "branch",
+ .refname = branch,
.update_index = 1,
.value_type = REFTABLE_LOG_UPDATE,
.value = {
@@ -582,11 +591,11 @@ static void test_reftable_stack_log_normalize(void)
err = reftable_new_stack(&st, dir, cfg);
EXPECT_ERR(err);
- input.value.update.message = "one\ntwo";
+ input.value.update.message = onetwomessage;
err = reftable_stack_add(st, &write_test_log, &arg);
EXPECT(err == REFTABLE_API_ERROR);
- input.value.update.message = "one";
+ input.value.update.message = onemessage;
err = reftable_stack_add(st, &write_test_log, &arg);
EXPECT_ERR(err);
@@ -594,7 +603,7 @@ static void test_reftable_stack_log_normalize(void)
EXPECT_ERR(err);
EXPECT(0 == strcmp(dest.value.update.message, "one\n"));
- input.value.update.message = "two\n";
+ input.value.update.message = twomessage;
arg.update_index = 2;
err = reftable_stack_add(st, &write_test_log, &arg);
EXPECT_ERR(err);
@@ -691,15 +700,14 @@ static void test_reftable_stack_tombstone(void)
static void test_reftable_stack_hash_id(void)
{
char *dir = get_tmp_dir(__LINE__);
-
struct reftable_write_options cfg = { 0 };
struct reftable_stack *st = NULL;
int err;
-
+ char master[] = "master", target[] = "target";
struct reftable_ref_record ref = {
- .refname = "master",
+ .refname = master,
.value_type = REFTABLE_REF_SYMREF,
- .value.symref = "target",
+ .value.symref = target,
.update_index = 1,
};
struct reftable_write_options cfg32 = { .hash_id = GIT_SHA256_FORMAT_ID };
@@ -874,12 +882,12 @@ static void test_reftable_stack_auto_compaction(void)
EXPECT_ERR(err);
for (i = 0; i < N; i++) {
- char name[100];
+ char name[100], master[] = "master";
struct reftable_ref_record ref = {
.refname = name,
.update_index = reftable_stack_next_update_index(st),
.value_type = REFTABLE_REF_SYMREF,
- .value.symref = "master",
+ .value.symref = master,
};
snprintf(name, sizeof(name), "branch%04d", i);
@@ -910,10 +918,11 @@ static void test_reftable_stack_add_performs_auto_compaction(void)
EXPECT_ERR(err);
for (i = 0; i <= n; i++) {
+ char master[] = "master";
struct reftable_ref_record ref = {
.update_index = reftable_stack_next_update_index(st),
.value_type = REFTABLE_REF_SYMREF,
- .value.symref = "master",
+ .value.symref = master,
};
/*
@@ -959,12 +968,12 @@ static void test_reftable_stack_compaction_concurrent(void)
EXPECT_ERR(err);
for (i = 0; i < N; i++) {
- char name[100];
+ char name[100], master[] = "master";
struct reftable_ref_record ref = {
.refname = name,
.update_index = reftable_stack_next_update_index(st1),
.value_type = REFTABLE_REF_SYMREF,
- .value.symref = "master",
+ .value.symref = master,
};
snprintf(name, sizeof(name), "branch%04d", i);
@@ -1009,12 +1018,12 @@ static void test_reftable_stack_compaction_concurrent_clean(void)
EXPECT_ERR(err);
for (i = 0; i < N; i++) {
- char name[100];
+ char name[100], master[] = "master";
struct reftable_ref_record ref = {
.refname = name,
.update_index = reftable_stack_next_update_index(st1),
.value_type = REFTABLE_REF_SYMREF,
- .value.symref = "master",
+ .value.symref = master,
};
snprintf(name, sizeof(name), "branch%04d", i);
There are several cases where we initialize non-const fields with string constants. This is invalid and will cause warnings once we enable the `-Wwrite-strings` warning. Adapt those cases to instead use string arrays. Signed-off-by: Patrick Steinhardt <ps@pks.im> --- builtin/remote.c | 3 +- diff.c | 3 +- entry.c | 7 ++-- ident.c | 9 +++- line-log.c | 3 +- object-file.c | 3 +- pretty.c | 5 ++- refs/reftable-backend.c | 5 ++- reftable/basics_test.c | 5 ++- reftable/block_test.c | 4 +- reftable/merged_test.c | 52 ++++++++++++----------- reftable/readwrite_test.c | 60 ++++++++++++++++----------- reftable/stack_test.c | 87 +++++++++++++++++++++------------------ 13 files changed, 144 insertions(+), 102 deletions(-)