X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Ftools.c;h=dd7243c2c6a7ff6d213a291642e700a661e90627;hp=eeaff6f17f644233f7aa1772ab27c69aad69f81f;hb=1f45ec04761cd99011445c6d41cd64a3951f77e0;hpb=03a596908b779bbb4b7c2f739c5e238f8c5d6390 diff --git a/tools/tools.c b/tools/tools.c index eeaff6f1..dd7243c2 100644 --- a/tools/tools.c +++ b/tools/tools.c @@ -210,6 +210,12 @@ char *temp_dir(const void *ctx) return tmpdir; } +int unlink_file_destructor(char *filename) +{ + unlink(filename); + return 0; +} + char *maybe_temp_file(const void *ctx, const char *extension, bool keep, const char *srcname) { @@ -218,11 +224,7 @@ char *maybe_temp_file(const void *ctx, const char *extension, bool keep, struct stat st; unsigned int count = 0; - if (!keep) - srcname = talloc_basename(ctx, srcname); - else - assert(srcname[0] == '/'); - + srcname = talloc_basename(ctx, srcname); if (strrchr(srcname, '.')) baselen = strrchr(srcname, '.') - srcname; else @@ -230,7 +232,7 @@ char *maybe_temp_file(const void *ctx, const char *extension, bool keep, do { f = talloc_asprintf(ctx, "%s/%.*s%s%s", - keep ? "" : temp_dir(ctx), + temp_dir(ctx), baselen, srcname, suffix, extension); talloc_free(suffix); @@ -238,7 +240,10 @@ char *maybe_temp_file(const void *ctx, const char *extension, bool keep, } while (lstat(f, &st) == 0); if (tools_verbose) - printf("Creating file %s\n", f); + printf("Creating %sfile %s\n", keep ? "" : "temporary ", f); + + if (!keep) + talloc_set_destructor(f, unlink_file_destructor); talloc_free(suffix); return f;