diff options
author | joerg <joerg@pkgsrc.org> | 2008-08-05 19:01:27 +0000 |
---|---|---|
committer | joerg <joerg@pkgsrc.org> | 2008-08-05 19:01:27 +0000 |
commit | 18f092df0f153c0d940da9263600c4f011046b4b (patch) | |
tree | 7c9f05e8daae3d60715a12a2f2a1f22e349f8af1 | |
parent | f88385bdf4da3357c283ed9453b462889705eb9c (diff) | |
download | pkgsrc-18f092df0f153c0d940da9263600c4f011046b4b.tar.gz |
Add another constant for temporary +REQUIRED_BY files. Don't use mkstemp
in pkg_delete for that purpose. If more than one produce tries to change
this file, breakage will happen anyway and this means the system is
somewhat self-healing.
-rw-r--r-- | pkgtools/pkg_install/files/delete/perform.c | 60 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/lib/lib.h | 3 |
2 files changed, 28 insertions, 35 deletions
diff --git a/pkgtools/pkg_install/files/delete/perform.c b/pkgtools/pkg_install/files/delete/perform.c index 3c0a68a50e6..28c074782ac 100644 --- a/pkgtools/pkg_install/files/delete/perform.c +++ b/pkgtools/pkg_install/files/delete/perform.c @@ -1,4 +1,4 @@ -/* $NetBSD: perform.c,v 1.23.2.3 2008/08/05 18:41:44 joerg Exp $ */ +/* $NetBSD: perform.c,v 1.23.2.4 2008/08/05 19:01:27 joerg Exp $ */ #if HAVE_CONFIG_H #include "config.h" @@ -11,7 +11,7 @@ #if 0 static const char *rcsid = "from FreeBSD Id: perform.c,v 1.15 1997/10/13 15:03:52 jkh Exp"; #else -__RCSID("$NetBSD: perform.c,v 1.23.2.3 2008/08/05 18:41:44 joerg Exp $"); +__RCSID("$NetBSD: perform.c,v 1.23.2.4 2008/08/05 19:01:27 joerg Exp $"); #endif #endif @@ -119,32 +119,25 @@ cleanup(int sig) static int undepend(const char *deppkgname, void *vp) { - char *pkg2delname = vp; - char fname[MaxPathSize], ftmp[MaxPathSize]; - char fbuf[MaxPathSize]; - FILE *fp, *fpwr; - int s; + char *fname, *fname_tmp; + char fbuf[MaxPathSize]; + const char *pkg2delname = vp; + FILE *fp, *fpwr; - (void) snprintf(fname, sizeof(fname), "%s/%s/%s", - _pkgdb_getPKGDB_DIR(), deppkgname, REQUIRED_BY_FNAME); - fp = fopen(fname, "r"); - if (fp == NULL) { + fname = pkgdb_pkg_file(deppkgname, REQUIRED_BY_FNAME); + fname_tmp = pkgdb_pkg_file(deppkgname, REQUIRED_BY_FNAME_TMP); + + if ((fp = fopen(fname, "r")) == NULL) { warnx("couldn't open dependency file `%s'", fname); + free(fname); + free(fname_tmp); return 0; } - (void) snprintf(ftmp, sizeof(ftmp), "%s.XXXXXX", fname); - s = mkstemp(ftmp); - if (s == -1) { - fclose(fp); - warnx("couldn't open temp file `%s'", ftmp); - return 0; - } - fpwr = fdopen(s, "w"); - if (fpwr == NULL) { - close(s); + if ((fpwr = fopen(fname_tmp, "w")) == NULL) { fclose(fp); - warnx("couldn't fdopen temp file `%s'", ftmp); - remove(ftmp); + warnx("couldn't open temporary file `%s'", fname_tmp); + free(fname); + free(fname_tmp); return 0; } while (fgets(fbuf, sizeof(fbuf), fp) != NULL) { @@ -154,20 +147,19 @@ undepend(const char *deppkgname, void *vp) fputs(fbuf, fpwr), putc('\n', fpwr); } (void) fclose(fp); - if (fchmod(s, 0644) == FAIL) { - warnx("error changing permission of temp file `%s'", ftmp); - fclose(fpwr); - remove(ftmp); - return 0; - } if (fclose(fpwr) == EOF) { - warnx("error closing temp file `%s'", ftmp); - remove(ftmp); + warnx("error closing temporary file `%s'", fname_tmp); + remove(fname_tmp); + free(fname); + free(fname_tmp); return 0; } - if (rename(ftmp, fname) == -1) - warn("error renaming `%s' to `%s'", ftmp, fname); - remove(ftmp); /* just in case */ + if (rename(fname_tmp, fname) == -1) + warn("error renaming `%s' to `%s'", fname_tmp, fname); + remove(fname_tmp); /* just in case */ + + free(fname); + free(fname_tmp); return 0; } diff --git a/pkgtools/pkg_install/files/lib/lib.h b/pkgtools/pkg_install/files/lib/lib.h index 915eeefb68e..52d43bbe30a 100644 --- a/pkgtools/pkg_install/files/lib/lib.h +++ b/pkgtools/pkg_install/files/lib/lib.h @@ -1,4 +1,4 @@ -/* $NetBSD: lib.h,v 1.42.2.10 2008/08/02 20:33:50 joerg Exp $ */ +/* $NetBSD: lib.h,v 1.42.2.11 2008/08/05 19:01:27 joerg Exp $ */ /* from FreeBSD Id: lib.h,v 1.25 1997/10/08 07:48:03 charnier Exp */ @@ -112,6 +112,7 @@ enum { #define INSTALL_FNAME "+INSTALL" #define DEINSTALL_FNAME "+DEINSTALL" #define REQUIRED_BY_FNAME "+REQUIRED_BY" +#define REQUIRED_BY_FNAME_TMP "+REQUIRED_BY.tmp" #define DISPLAY_FNAME "+DISPLAY" #define MTREE_FNAME "+MTREE_DIRS" #define BUILD_VERSION_FNAME "+BUILD_VERSION" |