diff options
-rw-r--r-- | builtin/index-pack.c | 6 | ||||
-rw-r--r-- | cache.h | 2 | ||||
-rw-r--r-- | environment.c | 16 | ||||
-rw-r--r-- | fast-import.c | 9 | ||||
-rw-r--r-- | pack-bitmap-write.c | 12 | ||||
-rw-r--r-- | pack-write.c | 12 |
6 files changed, 30 insertions, 27 deletions
diff --git a/builtin/index-pack.c b/builtin/index-pack.c index 49e7175d9a..f4af2ab37a 100644 --- a/builtin/index-pack.c +++ b/builtin/index-pack.c @@ -307,10 +307,10 @@ static const char *open_pack_file(const char *pack_name) if (from_stdin) { input_fd = 0; if (!pack_name) { - static char tmp_file[PATH_MAX]; - output_fd = odb_mkstemp(tmp_file, sizeof(tmp_file), + struct strbuf tmp_file = STRBUF_INIT; + output_fd = odb_mkstemp(&tmp_file, "pack/tmp_pack_XXXXXX"); - pack_name = xstrdup(tmp_file); + pack_name = strbuf_detach(&tmp_file, NULL); } else { output_fd = open(pack_name, O_CREAT|O_EXCL|O_RDWR, 0600); if (output_fd < 0) @@ -1679,7 +1679,7 @@ extern void pack_report(void); * usual "XXXXXX" trailer, and the resulting filename is written into the * "template" buffer. Returns the open descriptor. */ -extern int odb_mkstemp(char *template, size_t limit, const char *pattern); +extern int odb_mkstemp(struct strbuf *template, const char *pattern); /* * Generate the filename to be used for a pack file with checksum "sha1" and diff --git a/environment.c b/environment.c index 2fdba76222..88276790db 100644 --- a/environment.c +++ b/environment.c @@ -274,7 +274,7 @@ char *get_object_directory(void) return git_object_dir; } -int odb_mkstemp(char *template, size_t limit, const char *pattern) +int odb_mkstemp(struct strbuf *template, const char *pattern) { int fd; /* @@ -282,18 +282,18 @@ int odb_mkstemp(char *template, size_t limit, const char *pattern) * restrictive except to remove write permission. */ int mode = 0444; - snprintf(template, limit, "%s/%s", - get_object_directory(), pattern); - fd = git_mkstemp_mode(template, mode); + strbuf_reset(template); + strbuf_addf(template, "%s/%s", get_object_directory(), pattern); + fd = git_mkstemp_mode(template->buf, mode); if (0 <= fd) return fd; /* slow path */ /* some mkstemp implementations erase template on failure */ - snprintf(template, limit, "%s/%s", - get_object_directory(), pattern); - safe_create_leading_directories(template); - return xmkstemp_mode(template, mode); + strbuf_reset(template); + strbuf_addf(template, "%s/%s", get_object_directory(), pattern); + safe_create_leading_directories(template->buf); + return xmkstemp_mode(template->buf, mode); } int odb_pack_keep(const char *name) diff --git a/fast-import.c b/fast-import.c index f6f416f20a..1ea3a08609 100644 --- a/fast-import.c +++ b/fast-import.c @@ -890,14 +890,15 @@ static struct tree_content *dup_tree_content(struct tree_content *s) static void start_packfile(void) { - static char tmp_file[PATH_MAX]; + struct strbuf tmp_file = STRBUF_INIT; struct packed_git *p; struct pack_header hdr; int pack_fd; - pack_fd = odb_mkstemp(tmp_file, sizeof(tmp_file), - "pack/tmp_pack_XXXXXX"); - FLEX_ALLOC_STR(p, pack_name, tmp_file); + pack_fd = odb_mkstemp(&tmp_file, "pack/tmp_pack_XXXXXX"); + FLEX_ALLOC_STR(p, pack_name, tmp_file.buf); + strbuf_release(&tmp_file); + p->pack_fd = pack_fd; p->do_not_close = 1; pack_file = sha1fd(pack_fd, p->pack_name); diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c index 44492c346c..e313f4f2bc 100644 --- a/pack-bitmap-write.c +++ b/pack-bitmap-write.c @@ -508,16 +508,16 @@ void bitmap_writer_finish(struct pack_idx_entry **index, const char *filename, uint16_t options) { - static char tmp_file[PATH_MAX]; static uint16_t default_version = 1; static uint16_t flags = BITMAP_OPT_FULL_DAG; + struct strbuf tmp_file = STRBUF_INIT; struct sha1file *f; struct bitmap_disk_header header; - int fd = odb_mkstemp(tmp_file, sizeof(tmp_file), "pack/tmp_bitmap_XXXXXX"); + int fd = odb_mkstemp(&tmp_file, "pack/tmp_bitmap_XXXXXX"); - f = sha1fd(fd, tmp_file); + f = sha1fd(fd, tmp_file.buf); memcpy(header.magic, BITMAP_IDX_SIGNATURE, sizeof(BITMAP_IDX_SIGNATURE)); header.version = htons(default_version); @@ -537,9 +537,11 @@ void bitmap_writer_finish(struct pack_idx_entry **index, sha1close(f, NULL, CSUM_FSYNC); - if (adjust_shared_perm(tmp_file)) + if (adjust_shared_perm(tmp_file.buf)) die_errno("unable to make temporary bitmap file readable"); - if (rename(tmp_file, filename)) + if (rename(tmp_file.buf, filename)) die_errno("unable to rename temporary bitmap file to '%s'", filename); + + strbuf_release(&tmp_file); } diff --git a/pack-write.c b/pack-write.c index 485080a31a..fa97b72559 100644 --- a/pack-write.c +++ b/pack-write.c @@ -71,9 +71,9 @@ const char *write_idx_file(const char *index_name, struct pack_idx_entry **objec f = sha1fd_check(index_name); } else { if (!index_name) { - static char tmp_file[PATH_MAX]; - fd = odb_mkstemp(tmp_file, sizeof(tmp_file), "pack/tmp_idx_XXXXXX"); - index_name = xstrdup(tmp_file); + struct strbuf tmp_file = STRBUF_INIT; + fd = odb_mkstemp(&tmp_file, "pack/tmp_idx_XXXXXX"); + index_name = strbuf_detach(&tmp_file, NULL); } else { unlink(index_name); fd = open(index_name, O_CREAT|O_EXCL|O_WRONLY, 0600); @@ -329,11 +329,11 @@ int encode_in_pack_object_header(unsigned char *hdr, int hdr_len, struct sha1file *create_tmp_packfile(char **pack_tmp_name) { - char tmpname[PATH_MAX]; + struct strbuf tmpname = STRBUF_INIT; int fd; - fd = odb_mkstemp(tmpname, sizeof(tmpname), "pack/tmp_pack_XXXXXX"); - *pack_tmp_name = xstrdup(tmpname); + fd = odb_mkstemp(&tmpname, "pack/tmp_pack_XXXXXX"); + *pack_tmp_name = strbuf_detach(&tmpname, NULL); return sha1fd(fd, *pack_tmp_name); } |