I installed this patch to have "sort" warn if a temporary file can't be removed in normal operation (e.g. because someone did a "chmod a-w /tmp" in the middle of the "sort" :-). Also, I removed some code from the critical section and tuned zaptemp a bit.
2004-11-12 Paul Eggert <[EMAIL PROTECTED]> * src/sort.c (zaptemp): Warn if a temporary file is not removed. Remove a bit of code from the critical section. Take advantage of the fact that NAME is now always in the list. Index: src/sort.c =================================================================== RCS file: /fetish/cu/src/sort.c,v retrieving revision 1.298 retrieving revision 1.300 diff -p -u -r1.298 -r1.300 --- src/sort.c 13 Nov 2004 00:50:56 -0000 1.298 +++ src/sort.c 13 Nov 2004 04:45:58 -0000 1.300 @@ -514,28 +514,34 @@ add_temp_dir (char const *dir) temp_dirs[temp_dir_count++] = dir; } -/* Search through the list of temporary files for NAME; - remove it if it is found on the list. */ +/* Remove NAME from the list of temporary files. */ static void zaptemp (const char *name) { struct tempnode *volatile *pnode; struct tempnode *node; + struct tempnode *next; sigset_t oldset; + int unlink_status; + int unlink_errno = 0; - for (pnode = &temphead; (node = *pnode); pnode = &node->next) - if (node->name == name) - { - /* Unlink the temporary file in a critical section, to avoid races. */ - sigprocmask (SIG_BLOCK, &caught_signals, &oldset); - unlink (name); - if (! (*pnode = node->next)) - temptail = pnode; - sigprocmask (SIG_SETMASK, &oldset, NULL); - free (node); - break; - } + for (pnode = &temphead; (node = *pnode)->name != name; pnode = &node->next) + continue; + + /* Unlink the temporary file in a critical section to avoid races. */ + next = node->next; + sigprocmask (SIG_BLOCK, &caught_signals, &oldset); + unlink_status = unlink (name); + unlink_errno = errno; + *pnode = next; + sigprocmask (SIG_SETMASK, &oldset, NULL); + + if (unlink_status != 0) + error (0, unlink_errno, "warning: cannot remove: %s", name); + if (! next) + temptail = pnode; + free (node); } #if HAVE_NL_LANGINFO _______________________________________________ Bug-coreutils mailing list [EMAIL PROTECTED] http://lists.gnu.org/mailman/listinfo/bug-coreutils