From faa032f15c74f1c2c01991e130cfad44858bdc41 Mon Sep 17 00:00:00 2001 From: Ben Gras Date: Tue, 11 Dec 2012 03:50:04 +0100 Subject: [PATCH] pax: workaround for mkstemp() and long filenames . symptom: mkstemp() looping forever trying to find a unique filename . reported by pikpik as "BSDTar Endless Extraction of NCurses' Distfiles" --- bin/pax/file_subs.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/bin/pax/file_subs.c b/bin/pax/file_subs.c index e3707ca5a..ea7a66a8b 100644 --- a/bin/pax/file_subs.c +++ b/bin/pax/file_subs.c @@ -160,8 +160,23 @@ file_creat(ARCHD *arcn, int write_to_hardlink) * in the path until chk_path() finds that it cannot fix * anything further. if that happens we just give up. */ +#ifdef __minix + { + /* For minix, generate the temporary filename + * conservatively - just write Xes into the last component. + * There is space because of the malloc(). + */ + int cc; + char *last_slash; + strcpy(arcn->tmp_name, arcn->name); + if(!(last_slash = strrchr(arcn->tmp_name, '/'))) + strcpy(arcn->tmp_name, "XXXXXX"); + else strcpy(last_slash+1, "XXXXXX"); + } +#else (void)snprintf(arcn->tmp_name, arcn->nlen + 8, "%s.XXXXXX", arcn->name); +#endif fd = mkstemp(arcn->tmp_name); if (fd >= 0) break;