Date: Tue, 17 Nov 1998 15:30:35 +0100 (CET) From: arnej@math.ntnu.no To: FreeBSD-gnats-submit@FreeBSD.ORG Subject: bin/8728: mk-amd-map has several bugs and doesn't work at all Message-ID: <199811171430.PAA03497@fimfpc26.math.ntnu.no>
next in thread | raw e-mail | index | archive | help
>Number: 8728
>Category: bin
>Synopsis: mk-amd-map has several bugs and doesn't work at all
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Tue Nov 17 06:40:02 PST 1998
>Last-Modified:
>Originator: Arne Henrik Juul
>Organization:
Norwegian University of Technology and Science
>Release: FreeBSD 3.0-CURRENT i386
>Environment:
Running 3.0 current as of november 1998.
>Description:
The program mk-amd-map as imported (from NetBSD?) and modified
doesn't work, and it can't have been tested as far as I can see.
(I actually use it in daily operations, so I noticed at once
when I upgraded to 3.0-current).
There are some code to use mkstemp if available in here that's
so completely bogus I just removed it, it would need a complete
rethink. (As it was it opened the output database file *instead*
of the input text file). Also, the conversion from .dir/.pag files
to just a .db file wasn't really complete, and one error message
was just wrong.
>How-To-Repeat:
Try to run mk-amd-map and check the resulting database, or
run mk-amd-map -p and watch the resulting lossage.
>Fix:
Apply following patch:
Index: contrib/amd/mk-amd-map/mk-amd-map.c
===================================================================
RCS file: /usr/cvs/src/contrib/amd/mk-amd-map/mk-amd-map.c,v
retrieving revision 1.4
diff -u -r1.4 mk-amd-map.c
--- mk-amd-map.c 1998/08/27 07:25:25 1.4
+++ mk-amd-map.c 1998/11/17 14:03:44
@@ -263,16 +263,10 @@
perror("mk-amd-map: malloc");
exit(1);
}
-#ifdef HAVE_MKSTEMP
- mapfd = mkstemp(maptmp);
-#else /* not HAVE_MKSTEMP */
- map = mktemp(maptmp);
- if (!maptmp) {
+ if (!mktemp(maptmp)) {
fprintf(stderr, "cannot create temporary file\n");
exit(1);
}
- mapfd = open(map, O_RDONLY);
-#endif /* not HAVE_MKSTEMP */
/* open DBM files */
sprintf(maptdb, "%s.db", maptmp);
@@ -283,6 +277,7 @@
}
}
/* open and check if map file was opened OK */
+ mapfd = open(map, O_RDONLY);
mapf = fdopen(mapfd, "r");
if (mapf && !printit)
mapd = dbm_open(maptmp, O_RDWR|O_CREAT, 0444);
@@ -298,21 +293,14 @@
int error = read_file(mapf, map, mapd);
(void) close(mapfd);
(void) fclose(mapf);
- dbm_close(mapd);
- if (printit) {
- if (error) {
- fprintf(stderr, "Error creating ndbm map for %s\n", map);
- rc = 1;
- }
- } else {
-
- if (error) {
+ if (error) {
fprintf(stderr, "Error reading source file %s\n", map);
rc = 1;
- } else {
+ }
+ if (!printit) {
+ dbm_close(mapd);
+ if (!error) {
sprintf(mapdb, "%s.db", map);
- if (unlink(mapdb) == 0)
- fprintf(stderr, "WARNING: existing map \"%s.db\" destroyed\n", map);
if (rename(maptdb, mapdb) < 0) {
fprintf(stderr, "Couldn't rename %s to ", maptdb);
perror(mapdb);
@@ -322,7 +310,6 @@
}
}
}
-
} else {
fprintf(stderr, "Can't open \"%s.db\" for ", map);
perror("writing");
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199811171430.PAA03497>
