Return to BSD News archive
Newsgroups: comp.unix.bsd Path: sserve!manuel!munnari.oz.au!metro!news From: dawes@physics.su.OZ.AU (David Dawes) Subject: make(1) unlinking directories Message-ID: <1992Aug10.062618.27013@ucc.su.OZ.AU> Sender: news@ucc.su.OZ.AU Nntp-Posting-Host: physics.su.oz.au Organization: School of Physics, University of Sydney, Australia Date: Mon, 10 Aug 1992 06:26:18 GMT Lines: 96 I was building X386 this morning, and when I interrupted 'make' it told me it had removed a directory. I checked and it really had unlinked it. (I got it back by booting the fixit disk and running fsck.) I've patched the make source so that it won't do this anymore. Here are my patches: *** compat.c.orig Mon May 11 13:54:28 1992 --- compat.c Mon Aug 10 14:36:41 1992 *************** *** 59,64 **** --- 59,65 ---- #include <sys/wait.h> #include <sys/errno.h> #include <ctype.h> + #include <sys/stat.h> #include "make.h" extern int errno; *************** *** 80,85 **** --- 81,87 ---- * CompatInterrupt -- * Interrupt the creation of the current target and remove it if * it ain't precious. + * Don't unlink it if it is a directory * * Results: * None. *************** *** 95,106 **** int signo; { GNode *gn; if ((curTarg != NILGNODE) && !Targ_Precious (curTarg)) { char *file = Var_Value (TARGET, curTarg); ! if (unlink (file) == SUCCESS) { ! printf ("*** %s removed\n", file); } /* --- 97,112 ---- int signo; { GNode *gn; + struct stat sbuf; if ((curTarg != NILGNODE) && !Targ_Precious (curTarg)) { char *file = Var_Value (TARGET, curTarg); ! stat (file, &sbuf); ! if (!(sbuf.st_mode & S_IFDIR)) { ! if (unlink (file) == SUCCESS) { ! printf ("*** %s removed\n", file); ! } } /* *** job.c.orig Mon May 11 13:55:59 1992 --- job.c Mon Aug 10 14:30:44 1992 *************** *** 2469,2476 **** char *file = (job->node->path == (char *)NULL ? job->node->name : job->node->path); ! if (unlink (file) == 0) { ! Error ("*** %s removed", file); } } #ifdef RMT_WANTS_SIGNALS --- 2469,2481 ---- char *file = (job->node->path == (char *)NULL ? job->node->name : job->node->path); ! /* Don't unlink directories */ ! struct stat sbuf; ! stat (file, &sbuf); ! if (!(sbuf.st_mode & S_IFDIR)) { ! if (unlink (file) == 0) { ! Error ("*** %s removed", file); ! } } } #ifdef RMT_WANTS_SIGNALS David -- ------------------------------------------------------------------------------ David Dawes (dawes@physics.su.oz.au) DoD#210 | Phone: +61 2 692 2639 School of Physics, University of Sydney, Australia | Fax: +61 2 660 2903 ------------------------------------------------------------------------------