212
hashwrite(f, hash, the_hash_algo->rawsz);
213
}
214
215
-const char *write_rev_file(const char *rev_name,
216
- struct pack_idx_entry **objects,
217
- uint32_t nr_objects,
218
- const unsigned char *hash,
219
- unsigned flags)
215
+char *write_rev_file(const char *rev_name,
216
+ struct pack_idx_entry **objects,
217
+ uint32_t nr_objects,
218
+ const unsigned char *hash,
219
+ unsigned flags)
220
{
221
uint32_t *pack_order;
222
uint32_t i;
223
- const char *ret;
223
+ char *ret;
224
225
if (!(flags & WRITE_REV) && !(flags & WRITE_REV_VERIFY))
226
return NULL;
238
return ret;
239
}
240
241
-const char *write_rev_file_order(const char *rev_name,
242
- uint32_t *pack_order,
243
- uint32_t nr_objects,
244
- const unsigned char *hash,
245
- unsigned flags)
241
+char *write_rev_file_order(const char *rev_name,
242
+ uint32_t *pack_order,
243
+ uint32_t nr_objects,
244
+ const unsigned char *hash,
245
+ unsigned flags)
246
{
247
struct hashfile *f;
248
+ char *path;
249
int fd;
250
251
if ((flags & WRITE_REV) && (flags & WRITE_REV_VERIFY))
255
if (!rev_name) {
256
struct strbuf tmp_file = STRBUF_INIT;
257
fd = odb_mkstemp(&tmp_file, "pack/tmp_rev_XXXXXX");
257
- rev_name = strbuf_detach(&tmp_file, NULL);
258
+ path = strbuf_detach(&tmp_file, NULL);
259
} else {
260
unlink(rev_name);
261
fd = xopen(rev_name, O_CREAT|O_EXCL|O_WRONLY, 0600);
262
+ path = xstrdup(rev_name);
263
}
262
- f = hashfd(fd, rev_name);
264
+ f = hashfd(fd, path);
265
} else if (flags & WRITE_REV_VERIFY) {
266
struct stat statbuf;
267
if (stat(rev_name, &statbuf)) {
272
die_errno(_("could not stat: %s"), rev_name);
273
}
274
f = hashfd_check(rev_name);
273
- } else
275
+ path = xstrdup(rev_name);
276
+ } else {
277
return NULL;
278
+ }
279
280
write_rev_header(f);
281
282
write_rev_index_positions(f, pack_order, nr_objects);
283
write_rev_trailer(f, hash);
284
281
- if (rev_name && adjust_shared_perm(rev_name) < 0)
282
- die(_("failed to make %s readable"), rev_name);
285
+ if (adjust_shared_perm(path) < 0)
286
+ die(_("failed to make %s readable"), path);
287
288
finalize_hashfile(f, NULL, FSYNC_COMPONENT_PACK_METADATA,
289
CSUM_HASH_IN_STREAM | CSUM_CLOSE |
290
((flags & WRITE_IDX_VERIFY) ? 0 : CSUM_FSYNC));
291
288
- return rev_name;
292
+ return path;
293
}
294
295
static void write_mtimes_header(struct hashfile *f)
553
unsigned char hash[],
554
char **idx_tmp_name)
555
{
552
- const char *rev_tmp_name = NULL;
556
+ char *rev_tmp_name = NULL;
557
char *mtimes_tmp_name = NULL;
558
559
if (adjust_shared_perm(pack_tmp_name))
579
if (mtimes_tmp_name)
580
rename_tmp_packfile(name_buffer, mtimes_tmp_name, "mtimes");
581
578
- free((char *)rev_tmp_name);
582
+ free(rev_tmp_name);
583
free(mtimes_tmp_name);
584
}
585