{"thread":{"id":"19613","subject":"[PATCH v7 3/3] diff: generate pretty filenames in prep_temp_blob()","startedAt":"2009-05-31T08:35:50Z","lastAt":"2009-06-02T07:04:08Z","messageCount":5,"participants":["David Aguilar","Junio C Hamano","Johannes Sixt"],"isPatch":true,"patchVersion":7,"patchTotal":3},"messages":[{"id":"115123","messageId":"1243758952-28972-1-git-send-email-davvid@gmail.com","threadId":"19613","inReplyTo":null,"subject":"[PATCH v7 1/3] compat: add a mkstemps() compatibility function","fromName":"David Aguilar","fromEmail":"davvid@gmail.com","sentAt":"2009-05-31T08:35:50Z","receivedAt":"2009-05-31T08:35:50Z","isPatch":true,"sender":{"key":"davvid@gmail.com","avatar":"https://avatars.githubusercontent.com/u/13196?v=4"},"body":"mkstemps() is a BSD extension so provide an implementation\nfor cross-platform use.\n\nSigned-off-by: David Aguilar <davvid@gmail.com>\nTested-by: Johannes Sixt <j6t@kdbg.org> (Windows)\n---\n Makefile          |   19 ++++++++++++++++\n compat/mkstemps.c |   63 +++++++++++++++++++++++++++++++++++++++++++++++++++++\n config.mak.in     |    1 +\n configure.ac      |    7 ++++++\n git-compat-util.h |    9 +++++++\n 5 files changed, 99 insertions(+), 0 deletions(-)\n create mode 100644 compat/mkstemps.c\n\ndiff --git a/Makefile b/Makefile\nindex eaae45d..a70b5f0 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -52,6 +52,8 @@ all::\n #\n # Define NO_MKDTEMP if you don't have mkdtemp in the C library.\n #\n+# Define NO_MKSTEMPS if you don't have mkstemps in the C library.\n+#\n # Define NO_SYS_SELECT_H if you don't have sys/select.h.\n #\n # Define NO_SYMLINK_HEAD if you never want .git/HEAD to be a symbolic link.\n@@ -636,10 +638,12 @@ EXTLIBS =\n \n ifeq ($(uname_S),Linux)\n \tNO_STRLCPY = YesPlease\n+\tNO_MKSTEMPS = YesPlease\n \tTHREADED_DELTA_SEARCH = YesPlease\n endif\n ifeq ($(uname_S),GNU/kFreeBSD)\n \tNO_STRLCPY = YesPlease\n+\tNO_MKSTEMPS = YesPlease\n \tTHREADED_DELTA_SEARCH = YesPlease\n endif\n ifeq ($(uname_S),UnixWare)\n@@ -651,6 +655,7 @@ ifeq ($(uname_S),UnixWare)\n \tSHELL_PATH = /usr/local/bin/bash\n \tNO_IPV6 = YesPlease\n \tNO_HSTRERROR = YesPlease\n+\tNO_MKSTEMPS = YesPlease\n \tBASIC_CFLAGS += -Kthread\n \tBASIC_CFLAGS += -I/usr/local/include\n \tBASIC_LDFLAGS += -L/usr/local/lib\n@@ -674,6 +679,7 @@ ifeq ($(uname_S),SCO_SV)\n \tSHELL_PATH = /usr/bin/bash\n \tNO_IPV6 = YesPlease\n \tNO_HSTRERROR = YesPlease\n+\tNO_MKSTEMPS = YesPlease\n \tBASIC_CFLAGS += -I/usr/local/include\n \tBASIC_LDFLAGS += -L/usr/local/lib\n \tNO_STRCASESTR = YesPlease\n@@ -702,6 +708,7 @@ ifeq ($(uname_S),SunOS)\n \tNO_MEMMEM = YesPlease\n \tNO_HSTRERROR = YesPlease\n \tNO_MKDTEMP = YesPlease\n+\tNO_MKSTEMPS = YesPlease\n \tOLD_ICONV = UnfortunatelyYes\n \tifeq ($(uname_R),5.8)\n \t\tNO_UNSETENV = YesPlease\n@@ -724,6 +731,7 @@ ifeq ($(uname_O),Cygwin)\n \tNO_D_INO_IN_DIRENT = YesPlease\n \tNO_STRCASESTR = YesPlease\n \tNO_MEMMEM = YesPlease\n+\tNO_MKSTEMPS = YesPlease\n \tNO_SYMLINK_HEAD = YesPlease\n \tNEEDS_LIBICONV = YesPlease\n \tNO_FAST_WORKING_DIRECTORY = UnfortunatelyYes\n@@ -767,11 +775,13 @@ ifeq ($(uname_S),NetBSD)\n \tBASIC_LDFLAGS += -L/usr/pkg/lib $(CC_LD_DYNPATH)/usr/pkg/lib\n \tTHREADED_DELTA_SEARCH = YesPlease\n \tUSE_ST_TIMESPEC = YesPlease\n+\tNO_MKSTEMPS = YesPlease\n endif\n ifeq ($(uname_S),AIX)\n \tNO_STRCASESTR=YesPlease\n \tNO_MEMMEM = YesPlease\n \tNO_MKDTEMP = YesPlease\n+\tNO_MKSTEMPS = YesPlease\n \tNO_STRLCPY = YesPlease\n \tNO_NSEC = YesPlease\n \tFREAD_READS_DIRECTORIES = UnfortunatelyYes\n@@ -787,12 +797,14 @@ endif\n ifeq ($(uname_S),GNU)\n \t# GNU/Hurd\n \tNO_STRLCPY=YesPlease\n+\tNO_MKSTEMPS = YesPlease\n endif\n ifeq ($(uname_S),IRIX64)\n \tNO_IPV6=YesPlease\n \tNO_SETENV=YesPlease\n \tNO_STRCASESTR=YesPlease\n \tNO_MEMMEM = YesPlease\n+\tNO_MKSTEMPS = YesPlease\n \tNO_STRLCPY = YesPlease\n \tNO_SOCKADDR_STORAGE=YesPlease\n \tSHELL_PATH=/usr/gnu/bin/bash\n@@ -805,6 +817,7 @@ ifeq ($(uname_S),HP-UX)\n \tNO_SETENV=YesPlease\n \tNO_STRCASESTR=YesPlease\n \tNO_MEMMEM = YesPlease\n+\tNO_MKSTEMPS = YesPlease\n \tNO_STRLCPY = YesPlease\n \tNO_MKDTEMP = YesPlease\n \tNO_UNSETENV = YesPlease\n@@ -834,6 +847,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))\n \tNO_C99_FORMAT = YesPlease\n \tNO_STRTOUMAX = YesPlease\n \tNO_MKDTEMP = YesPlease\n+\tNO_MKSTEMPS = YesPlease\n \tSNPRINTF_RETURNS_BOGUS = YesPlease\n \tNO_SVN_TESTS = YesPlease\n \tNO_PERL_MAKEMAKER = YesPlease\n@@ -853,6 +867,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))\n endif\n ifneq (,$(findstring arm,$(uname_M)))\n \tARM_SHA1 = YesPlease\n+\tNO_MKSTEMPS = YesPlease\n endif\n \n -include config.mak.autogen\n@@ -1011,6 +1026,10 @@ ifdef NO_MKDTEMP\n \tCOMPAT_CFLAGS += -DNO_MKDTEMP\n \tCOMPAT_OBJS += compat/mkdtemp.o\n endif\n+ifdef NO_MKSTEMPS\n+\tCOMPAT_CFLAGS += -DNO_MKSTEMPS\n+\tCOMPAT_OBJS += compat/mkstemps.o\n+endif\n ifdef NO_UNSETENV\n \tCOMPAT_CFLAGS += -DNO_UNSETENV\n \tCOMPAT_OBJS += compat/unsetenv.o\ndiff --git a/compat/mkstemps.c b/compat/mkstemps.c\nnew file mode 100644\nindex 0000000..9ce729b\n--- /dev/null\n+++ b/compat/mkstemps.c\n@@ -0,0 +1,63 @@\n+#include \"../git-compat-util.h\"\n+\n+/* Adapted from libiberty's mkstemp.c. */\n+int gitmkstemps(char *pattern, int suffix_len)\n+{\n+\tstatic const char letters[] =\n+\t\t\"abcdefghijklmnopqrstuvwxyz\"\n+\t\t\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n+\t\t\"0123456789\";\n+\tstatic const int num_letters = 62;\n+\tuint64_t value;\n+\tstruct timeval tv;\n+\tchar *template;\n+\tsize_t len;\n+\tint fd, count;\n+\n+\tlen = strlen(pattern);\n+\n+\tif (len < 6 + suffix_len) {\n+\t\terrno = EINVAL;\n+\t\treturn -1;\n+\t}\n+\n+\tif (strncmp(&pattern[len - 6 - suffix_len], \"XXXXXX\", 6)) {\n+\t\terrno = EINVAL;\n+\t\treturn -1;\n+\t}\n+\n+\t/* Replace pattern's XXXXXX characters with randomness.\n+\t * Try TMP_MAX different filenames.\n+\t */\n+\tgettimeofday(&tv, NULL);\n+\tvalue = ((size_t)(tv.tv_usec << 16)) ^ tv.tv_sec ^ getpid();\n+\ttemplate = &pattern[len - 6 - suffix_len];\n+\tfor (count = 0; count < TMP_MAX; ++count) {\n+\t\tuint64_t v = value;\n+\t\t/* Fill in the random bits. */\n+\t\ttemplate[0] = letters[v % num_letters]; v/= num_letters;\n+\t\ttemplate[1] = letters[v % num_letters]; v/= num_letters;\n+\t\ttemplate[2] = letters[v % num_letters]; v/= num_letters;\n+\t\ttemplate[3] = letters[v % num_letters]; v/= num_letters;\n+\t\ttemplate[4] = letters[v % num_letters]; v/= num_letters;\n+\t\ttemplate[5] = letters[v % num_letters]; v/= num_letters;\n+\n+\t\tfd = open(pattern, O_CREAT | O_EXCL | O_RDWR, 0600);\n+\t\tif (fd > 0)\n+\t\t\treturn fd;\n+\t\t/* Fatal error (EPERM, ENOSPC etc).\n+\t\t * It doesn't make sense to loop.\n+\t\t */\n+\t\tif (errno != EEXIST)\n+\t\t\tbreak;\n+\t\t/* This is a random value.  It is only necessary that\n+\t\t * the next TMP_MAX values generated by adding 7777 to\n+\t\t * VALUE are different with (module 2^32).\n+\t\t */\n+\t\tvalue += 7777;\n+\t}\n+\t/* We return the null string if we can't find a unique file name.  */\n+\tpattern[0] = '\\0';\n+\terrno = EINVAL;\n+\treturn -1;\n+}\ndiff --git a/config.mak.in b/config.mak.in\nindex 7cce0c1..b6619af 100644\n--- a/config.mak.in\n+++ b/config.mak.in\n@@ -46,6 +46,7 @@ NO_STRTOUMAX=@NO_STRTOUMAX@\n NO_SETENV=@NO_SETENV@\n NO_UNSETENV=@NO_UNSETENV@\n NO_MKDTEMP=@NO_MKDTEMP@\n+NO_MKSTEMPS=@NO_MKSTEMPS@\n NO_ICONV=@NO_ICONV@\n OLD_ICONV=@OLD_ICONV@\n NO_DEFLATE_BOUND=@NO_DEFLATE_BOUND@\ndiff --git a/configure.ac b/configure.ac\nindex 4e728bc..953da07 100644\n--- a/configure.ac\n+++ b/configure.ac\n@@ -677,6 +677,13 @@ GIT_CHECK_FUNC(mkdtemp,\n [NO_MKDTEMP=YesPlease])\n AC_SUBST(NO_MKDTEMP)\n #\n+# Define NO_MKSTEMPS if you don't have mkstemps in the C library.\n+GIT_CHECK_FUNC(mkstemps,\n+[NO_MKSTEMPS=],\n+[NO_MKSTEMPS=YesPlease])\n+AC_SUBST(NO_MKSTEMPS)\n+#\n+#\n # Define NO_MMAP if you want to avoid mmap.\n #\n # Define NO_ICONV if your libc does not properly support iconv.\ndiff --git a/git-compat-util.h b/git-compat-util.h\nindex c7cf2d5..5a2d4e7 100644\n--- a/git-compat-util.h\n+++ b/git-compat-util.h\n@@ -113,6 +113,10 @@\n #define PATH_MAX 4096\n #endif\n \n+#ifndef TMP_MAX\n+#define TMP_MAX 16384\n+#endif\n+\n #ifndef PRIuMAX\n #define PRIuMAX \"llu\"\n #endif\n@@ -232,6 +236,11 @@ extern int gitsetenv(const char *, const char *, int);\n extern char *gitmkdtemp(char *);\n #endif\n \n+#ifdef NO_MKSTEMPS\n+#define mkstemps gitmkstemps\n+extern int gitmkstemps(char *, int);\n+#endif\n+\n #ifdef NO_UNSETENV\n #define unsetenv gitunsetenv\n extern void gitunsetenv(const char *);\n-- \n1.6.1.3\n"},{"id":"115122","messageId":"1243758952-28972-2-git-send-email-davvid@gmail.com","threadId":"19613","inReplyTo":"1243758952-28972-1-git-send-email-davvid@gmail.com","subject":"[PATCH v7 2/3] compat: add a basename() compatibility function","fromName":"David Aguilar","fromEmail":"davvid@gmail.com","sentAt":"2009-05-31T08:35:51Z","receivedAt":"2009-05-31T08:35:51Z","isPatch":true,"sender":{"key":"davvid@gmail.com","avatar":"https://avatars.githubusercontent.com/u/13196?v=4"},"body":"Some systems such as Windows lack libgen.h so provide a\nbasename() implementation for cross-platform use.\n\nThis introduces the NO_LIBGEN_H construct to the Makefile\nand autoconf scripts.\n\nSigned-off-by: David Aguilar <davvid@gmail.com>\n---\n Makefile          |    8 ++++++++\n compat/basename.c |   15 +++++++++++++++\n config.mak.in     |    1 +\n configure.ac      |    6 ++++++\n git-compat-util.h |    7 +++++++\n 5 files changed, 37 insertions(+), 0 deletions(-)\n create mode 100644 compat/basename.c\n\ndiff --git a/Makefile b/Makefile\nindex a70b5f0..a59f106 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -54,6 +54,8 @@ all::\n #\n # Define NO_MKSTEMPS if you don't have mkstemps in the C library.\n #\n+# Define NO_LIBGEN_H if you don't have libgen.h.\n+#\n # Define NO_SYS_SELECT_H if you don't have sys/select.h.\n #\n # Define NO_SYMLINK_HEAD if you never want .git/HEAD to be a symbolic link.\n@@ -834,6 +836,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))\n \tNO_PREAD = YesPlease\n \tNO_OPENSSL = YesPlease\n \tNO_CURL = YesPlease\n+\tNO_LIBGEN_H = YesPlease\n \tNO_SYMLINK_HEAD = YesPlease\n \tNO_IPV6 = YesPlease\n \tNO_SETENV = YesPlease\n@@ -899,6 +902,11 @@ ifndef CC_LD_DYNPATH\n \tendif\n endif\n \n+ifdef NO_LIBGEN_H\n+\tCOMPAT_CFLAGS += -DNO_LIBGEN_H\n+\tCOMPAT_OBJS += compat/basename.o\n+endif\n+\n ifdef NO_CURL\n \tBASIC_CFLAGS += -DNO_CURL\n else\ndiff --git a/compat/basename.c b/compat/basename.c\nnew file mode 100644\nindex 0000000..d8f8a3c\n--- /dev/null\n+++ b/compat/basename.c\n@@ -0,0 +1,15 @@\n+#include \"../git-compat-util.h\"\n+\n+/* Adapted from libiberty's basename.c.  */\n+char *gitbasename (char *path)\n+{\n+\tconst char *base;\n+\t/* Skip over the disk name in MSDOS pathnames. */\n+\tif (has_dos_drive_prefix(path))\n+\t\tpath += 2;\n+\tfor (base = path; *path; path++) {\n+\t\tif (is_dir_sep(*path))\n+\t\t\tbase = path + 1;\n+\t}\n+\treturn (char *)base;\n+}\ndiff --git a/config.mak.in b/config.mak.in\nindex b6619af..e8d96e8 100644\n--- a/config.mak.in\n+++ b/config.mak.in\n@@ -30,6 +30,7 @@ NEEDS_SSL_WITH_CRYPTO=@NEEDS_SSL_WITH_CRYPTO@\n NO_OPENSSL=@NO_OPENSSL@\n NO_CURL=@NO_CURL@\n NO_EXPAT=@NO_EXPAT@\n+NO_LIBGEN_H=@NO_LIBGEN_H@\n NEEDS_LIBICONV=@NEEDS_LIBICONV@\n NEEDS_SOCKET=@NEEDS_SOCKET@\n NO_SYS_SELECT_H=@NO_SYS_SELECT_H@\ndiff --git a/configure.ac b/configure.ac\nindex 953da07..108a97f 100644\n--- a/configure.ac\n+++ b/configure.ac\n@@ -627,6 +627,12 @@ AC_SUBST(SNPRINTF_RETURNS_BOGUS)\n ## (in default C library and libraries checked by AC_CHECK_LIB)\n AC_MSG_NOTICE([CHECKS for library functions])\n #\n+# Define NO_LIBGEN_H if you don't have libgen.h.\n+AC_CHECK_HEADER([libgen.h],\n+[NO_LIBGEN_H=],\n+[NO_LIBGEN_H=YesPlease])\n+AC_SUBST(NO_LIBGEN_H)\n+#\n # Define NO_STRCASESTR if you don't have strcasestr.\n GIT_CHECK_FUNC(strcasestr,\n [NO_STRCASESTR=],\ndiff --git a/git-compat-util.h b/git-compat-util.h\nindex 5a2d4e7..d248047 100644\n--- a/git-compat-util.h\n+++ b/git-compat-util.h\n@@ -97,6 +97,13 @@\n #include \"compat/mingw.h\"\n #endif\t/* __MINGW32__ */\n \n+#ifndef NO_LIBGEN_H\n+#include <libgen.h>\n+#else\n+#define basename gitbasename\n+extern char *gitbasename(char *);\n+#endif\n+\n #ifndef NO_ICONV\n #include <iconv.h>\n #endif\n-- \n1.6.1.3\n"},{"id":"115121","messageId":"1243758952-28972-3-git-send-email-davvid@gmail.com","threadId":"19613","inReplyTo":"1243758952-28972-2-git-send-email-davvid@gmail.com","subject":"[PATCH v7 3/3] diff: generate pretty filenames in prep_temp_blob()","fromName":"David Aguilar","fromEmail":"davvid@gmail.com","sentAt":"2009-05-31T08:35:52Z","receivedAt":"2009-05-31T08:35:52Z","isPatch":true,"sender":{"key":"davvid@gmail.com","avatar":"https://avatars.githubusercontent.com/u/13196?v=4"},"body":"Naturally, prep_temp_blob() did not care about filenames.\nAs a result, GIT_EXTERNAL_DIFF and textconv generated\nfilenames such as \".diff_XXXXXX\".\n\nThis modifies prep_temp_blob() to generate user-friendly\nfilenames when creating temporary files.\n\nDiffing \"name.ext\" now generates \"XXXXXX_name.ext\".\n\nSigned-off-by: David Aguilar <davvid@gmail.com>\n---\n cache.h                  |    2 ++\n diff.c                   |   12 +++++++++++-\n path.c                   |   16 ++++++++++++++++\n t/t4020-diff-external.sh |    9 +++++++++\n 4 files changed, 38 insertions(+), 1 deletions(-)\n\ndiff --git a/cache.h b/cache.h\nindex b8503ad..871c984 100644\n--- a/cache.h\n+++ b/cache.h\n@@ -614,6 +614,8 @@ extern int is_empty_blob_sha1(const unsigned char *sha1);\n \n int git_mkstemp(char *path, size_t n, const char *template);\n \n+int git_mkstemps(char *path, size_t n, const char *template, int suffix_len);\n+\n /*\n  * NOTE NOTE NOTE!!\n  *\ndiff --git a/diff.c b/diff.c\nindex dcfbcb0..4d0a5b9 100644\n--- a/diff.c\n+++ b/diff.c\n@@ -1964,8 +1964,16 @@ static void prep_temp_blob(const char *path, struct diff_tempfile *temp,\n {\n \tint fd;\n \tstruct strbuf buf = STRBUF_INIT;\n+\tstruct strbuf template = STRBUF_INIT;\n+\tchar *path_dup = xstrdup(path);\n+\tconst char *base = basename(path_dup);\n \n-\tfd = git_mkstemp(temp->tmp_path, PATH_MAX, \".diff_XXXXXX\");\n+\t/* Generate \"XXXXXX_basename.ext\" */\n+\tstrbuf_addstr(&template, \"XXXXXX_\");\n+\tstrbuf_addstr(&template, base);\n+\n+\tfd = git_mkstemps(temp->tmp_path, PATH_MAX, template.buf,\n+\t\t\tstrlen(base) + 1);\n \tif (fd < 0)\n \t\tdie(\"unable to create temp-file: %s\", strerror(errno));\n \tif (convert_to_working_tree(path,\n@@ -1981,6 +1989,8 @@ static void prep_temp_blob(const char *path, struct diff_tempfile *temp,\n \ttemp->hex[40] = 0;\n \tsprintf(temp->mode, \"%06o\", mode);\n \tstrbuf_release(&buf);\n+\tstrbuf_release(&template);\n+\tfree(path_dup);\n }\n \n static struct diff_tempfile *prepare_temp_file(const char *name,\ndiff --git a/path.c b/path.c\nindex 8a0a674..047fdb0 100644\n--- a/path.c\n+++ b/path.c\n@@ -139,6 +139,22 @@ int git_mkstemp(char *path, size_t len, const char *template)\n \treturn mkstemp(path);\n }\n \n+/* git_mkstemps() - create tmp file with suffix honoring TMPDIR variable. */\n+int git_mkstemps(char *path, size_t len, const char *template, int suffix_len)\n+{\n+\tconst char *tmp;\n+\tsize_t n;\n+\n+\ttmp = getenv(\"TMPDIR\");\n+\tif (!tmp)\n+\t\ttmp = \"/tmp\";\n+\tn = snprintf(path, len, \"%s/%s\", tmp, template);\n+\tif (len <= n) {\n+\t\terrno = ENAMETOOLONG;\n+\t\treturn -1;\n+\t}\n+\treturn mkstemps(path, suffix_len);\n+}\n \n int validate_headref(const char *path)\n {\ndiff --git a/t/t4020-diff-external.sh b/t/t4020-diff-external.sh\nindex 0720001..4ea42e0 100755\n--- a/t/t4020-diff-external.sh\n+++ b/t/t4020-diff-external.sh\n@@ -136,6 +136,15 @@ test_expect_success 'GIT_EXTERNAL_DIFF with more than one changed files' '\n \tGIT_EXTERNAL_DIFF=echo git diff\n '\n \n+test_expect_success 'GIT_EXTERNAL_DIFF generates pretty paths' '\n+\ttouch file.ext &&\n+\tgit add file.ext &&\n+\techo with extension > file.ext &&\n+\tGIT_EXTERNAL_DIFF=echo git diff file.ext | grep ......_file\\.ext &&\n+\tgit update-index --force-remove file.ext &&\n+\trm file.ext\n+'\n+\n echo \"#!$SHELL_PATH\" >fake-diff.sh\n cat >> fake-diff.sh <<\\EOF\n cat $2 >> crlfed.txt\n-- \n1.6.1.3\n"},{"id":"115174","messageId":"7vr5y4ogl0.fsf@alter.siamese.dyndns.org","threadId":"19613","inReplyTo":"1243758952-28972-1-git-send-email-davvid@gmail.com","subject":"Re: [PATCH v7 1/3] compat: add a mkstemps() compatibility function","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2009-06-01T02:03:55Z","receivedAt":"2009-06-01T02:03:55Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"David Aguilar <davvid@gmail.com> writes:\n\n> mkstemps() is a BSD extension so provide an implementation\n> for cross-platform use.\n> ...\n> diff --git a/git-compat-util.h b/git-compat-util.h\n> index c7cf2d5..5a2d4e7 100644\n> --- a/git-compat-util.h\n> +++ b/git-compat-util.h\n> @@ -113,6 +113,10 @@\n>  #define PATH_MAX 4096\n>  #endif\n>  \n> +#ifndef TMP_MAX\n> +#define TMP_MAX 16384\n> +#endif\n\nGiving fallback definition to PATH_MAX and PRIuMAX (as seen in the context\nof the hunk) makes perfect sense.  TMP_MAX on the other hand is being\nobsoleted in POSIX.1, and more importantly, we do not use it in our\nprogram anywhere other than the compatibility implementation of\nmkstemps().\n\nI'll move this to the file that is used, which is compat/mkstemps.c.  I'll\nfurther change the constant not to inherit from whatever the platform\nhappens to define TMP_MAX to be.  POSIX.1 says \"at least 25\", but the\nfallback implementation does not need to be constrained to such a low\nnumber.\n\nThanks.\n"},{"id":"115230","messageId":"4A24CEE8.4090702@viscovery.net","threadId":"19613","inReplyTo":"1243758952-28972-3-git-send-email-davvid@gmail.com","subject":"Re: [PATCH v7 3/3] diff: generate pretty filenames in prep_temp_blob()","fromName":"Johannes Sixt","fromEmail":"j.sixt@viscovery.net","sentAt":"2009-06-02T07:04:08Z","receivedAt":"2009-06-02T07:04:08Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"David Aguilar schrieb:\n> Naturally, prep_temp_blob() did not care about filenames.\n> As a result, GIT_EXTERNAL_DIFF and textconv generated\n> filenames such as \".diff_XXXXXX\".\n> \n> This modifies prep_temp_blob() to generate user-friendly\n> filenames when creating temporary files.\n> \n> Diffing \"name.ext\" now generates \"XXXXXX_name.ext\".\n> \n> Signed-off-by: David Aguilar <davvid@gmail.com>\n\nThis series (as per 003b33a from Junio's pu):\n\nTested-by: Johannes Sixt <j6t@kdbg.org> (Windows)\n\n-- Hannes\n"}]}