Page MenuHomeFreeBSD

D38641.id.diff
No OneTemporary

D38641.id.diff

diff --git a/usr.sbin/config/main.cc b/usr.sbin/config/main.cc
--- a/usr.sbin/config/main.cc
+++ b/usr.sbin/config/main.cc
@@ -579,7 +579,7 @@
p += strlen(KERNCONFTAG);
fprintf(fo, "%s", p);
fclose(fo);
- moveifchanged(path("config.c.new"), path("config.c"));
+ moveifchanged("config.c.new", "config.c");
cfgfile_removeall();
}
@@ -591,6 +591,7 @@
moveifchanged(const char *from_name, const char *to_name)
{
char *p, *q;
+ char *from_path, *to_path;
int changed;
size_t tsize;
struct stat from_sb, to_sb;
@@ -598,17 +599,19 @@
changed = 0;
- if ((from_fd = open(from_name, O_RDONLY)) < 0)
+ from_path = path(from_name);
+ to_path = path(to_name);
+ if ((from_fd = open(from_path, O_RDONLY)) < 0)
err(EX_OSERR, "moveifchanged open(%s)", from_name);
- if ((to_fd = open(to_name, O_RDONLY)) < 0)
+ if ((to_fd = open(to_path, O_RDONLY)) < 0)
changed++;
if (!changed && fstat(from_fd, &from_sb) < 0)
- err(EX_OSERR, "moveifchanged fstat(%s)", from_name);
+ err(EX_OSERR, "moveifchanged fstat(%s)", from_path);
if (!changed && fstat(to_fd, &to_sb) < 0)
- err(EX_OSERR, "moveifchanged fstat(%s)", to_name);
+ err(EX_OSERR, "moveifchanged fstat(%s)", to_path);
if (!changed && from_sb.st_size != to_sb.st_size)
changed++;
@@ -619,23 +622,31 @@
p = (char *)mmap(NULL, tsize, PROT_READ, MAP_SHARED, from_fd,
(off_t)0);
if (p == MAP_FAILED)
- err(EX_OSERR, "mmap %s", from_name);
+ err(EX_OSERR, "mmap %s", from_path);
q = (char *)mmap(NULL, tsize, PROT_READ, MAP_SHARED, to_fd,
(off_t)0);
if (q == MAP_FAILED)
- err(EX_OSERR, "mmap %s", to_name);
+ err(EX_OSERR, "mmap %s", to_path);
changed = memcmp(p, q, tsize);
munmap(p, tsize);
munmap(q, tsize);
}
+
if (changed) {
- if (rename(from_name, to_name) < 0)
- err(EX_OSERR, "rename(%s, %s)", from_name, to_name);
+ if (rename(from_path, to_path) < 0)
+ err(EX_OSERR, "rename(%s, %s)", from_path, to_path);
} else {
- if (unlink(from_name) < 0)
- err(EX_OSERR, "unlink(%s)", from_name);
+ if (unlink(from_path) < 0)
+ err(EX_OSERR, "unlink(%s)", from_path);
}
+
+ close(from_fd);
+ if (to_fd >= 0)
+ close(to_fd);
+
+ free(from_path);
+ free(to_path);
}
static void
diff --git a/usr.sbin/config/mkmakefile.cc b/usr.sbin/config/mkmakefile.cc
--- a/usr.sbin/config/mkmakefile.cc
+++ b/usr.sbin/config/mkmakefile.cc
@@ -184,7 +184,7 @@
}
(void) fclose(ifp);
(void) fclose(ofp);
- moveifchanged(path("Makefile.new"), path("Makefile"));
+ moveifchanged("Makefile.new", "Makefile");
}
static void
@@ -327,7 +327,7 @@
}
fprintf(ofp, "\"\\0\"\n};\n");
fclose(ofp);
- moveifchanged(path("hints.c.new"), path("hints.c"));
+ moveifchanged("hints.c.new", "hints.c");
}
/*
@@ -369,7 +369,7 @@
}
fprintf(ofp, "\"\\0\"\n};\n");
fclose(ofp);
- moveifchanged(path("env.c.new"), path("env.c"));
+ moveifchanged("env.c.new", "env.c");
}
static void

File Metadata

Mime Type
text/plain
Expires
Tue, May 26, 5:47 AM (8 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33525181
Default Alt Text
D38641.id.diff (2 KB)

Event Timeline