|
Harald Hoyer |
c4a5a0 |
From e74944eee578532bc7286b54ce5eccc715ed90c1 Mon Sep 17 00:00:00 2001
|
|
Harald Hoyer |
c4a5a0 |
From: Harald Hoyer <harald@redhat.com>
|
|
Harald Hoyer |
c4a5a0 |
Date: Mon, 2 Jul 2012 18:46:48 +0200
|
|
Harald Hoyer |
c4a5a0 |
Subject: [PATCH] dracut-install.c: for lazy install shebangs, do not check
|
|
Harald Hoyer |
c4a5a0 |
for existence
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
---
|
|
Harald Hoyer |
c4a5a0 |
install/dracut-install.c | 35 +++++++++++++++++++----------------
|
|
Harald Hoyer |
c4a5a0 |
1 file changed, 19 insertions(+), 16 deletions(-)
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
diff --git a/install/dracut-install.c b/install/dracut-install.c
|
|
Harald Hoyer |
c4a5a0 |
index 778881a..1d5748d 100644
|
|
Harald Hoyer |
c4a5a0 |
--- a/install/dracut-install.c
|
|
Harald Hoyer |
c4a5a0 |
+++ b/install/dracut-install.c
|
|
Harald Hoyer |
c4a5a0 |
@@ -57,7 +57,7 @@ static char *destrootdir = NULL;
|
|
Harald Hoyer |
c4a5a0 |
static Hashmap *items = NULL;
|
|
Harald Hoyer |
c4a5a0 |
static Hashmap *items_failed = NULL;
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
-static int dracut_install(const char *src, const char *dst, bool isdir, bool resolvedeps);
|
|
Harald Hoyer |
c4a5a0 |
+static int dracut_install(const char *src, const char *dst, bool isdir, bool resolvedeps, bool hashdst);
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
static size_t dir_len(char const *file)
|
|
Harald Hoyer |
c4a5a0 |
{
|
|
Harald Hoyer |
c4a5a0 |
@@ -260,7 +260,7 @@ static int resolve_deps(const char *src)
|
|
Harald Hoyer |
c4a5a0 |
for (q = p; *q && (!isspace(*q)); q++) ;
|
|
Harald Hoyer |
c4a5a0 |
*q = '\0';
|
|
Harald Hoyer |
c4a5a0 |
log_debug("Script install: '%s'", p);
|
|
Harald Hoyer |
c4a5a0 |
- ret = dracut_install(p, p, false, true);
|
|
Harald Hoyer |
c4a5a0 |
+ ret = dracut_install(p, p, false, true, false);
|
|
Harald Hoyer |
c4a5a0 |
if (ret != 0)
|
|
Harald Hoyer |
c4a5a0 |
log_error("ERROR: failed to install '%s'", p);
|
|
Harald Hoyer |
c4a5a0 |
return ret;
|
|
Harald Hoyer |
c4a5a0 |
@@ -287,7 +287,7 @@ static int resolve_deps(const char *src)
|
|
Harald Hoyer |
c4a5a0 |
int r;
|
|
Harald Hoyer |
c4a5a0 |
for (q = p; *q && *q != ' ' && *q != '\n'; q++) ;
|
|
Harald Hoyer |
c4a5a0 |
*q = '\0';
|
|
Harald Hoyer |
c4a5a0 |
- r = dracut_install(p, p, false, false);
|
|
Harald Hoyer |
c4a5a0 |
+ r = dracut_install(p, p, false, false, true);
|
|
Harald Hoyer |
c4a5a0 |
if (r != 0)
|
|
Harald Hoyer |
c4a5a0 |
log_error("ERROR: failed to install '%s' for '%s'", p, src);
|
|
Harald Hoyer |
c4a5a0 |
else
|
|
Harald Hoyer |
c4a5a0 |
@@ -301,7 +301,7 @@ static int resolve_deps(const char *src)
|
|
Harald Hoyer |
c4a5a0 |
*q = '\0';
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
/* ignore errors for base lib symlink */
|
|
Harald Hoyer |
c4a5a0 |
- if (dracut_install(p, p, false, false) == 0)
|
|
Harald Hoyer |
c4a5a0 |
+ if (dracut_install(p, p, false, false, true) == 0)
|
|
Harald Hoyer |
c4a5a0 |
log_debug("Lib install: '%s'", p);
|
|
Harald Hoyer |
c4a5a0 |
}
|
|
Harald Hoyer |
c4a5a0 |
}
|
|
Harald Hoyer |
c4a5a0 |
@@ -328,7 +328,7 @@ static int hmac_install(const char *src, const char *dst)
|
|
Harald Hoyer |
c4a5a0 |
asprintf(&srchmacname, "%s/.%s.hmac", srcpath, &src[dlen + 1]);
|
|
Harald Hoyer |
c4a5a0 |
asprintf(&dsthmacname, "%s/.%s.hmac", dstpath, &src[dlen + 1]);
|
|
Harald Hoyer |
c4a5a0 |
log_debug("hmac cp '%s' '%s')", srchmacname, dsthmacname);
|
|
Harald Hoyer |
c4a5a0 |
- dracut_install(srchmacname, dsthmacname, false, false);
|
|
Harald Hoyer |
c4a5a0 |
+ dracut_install(srchmacname, dsthmacname, false, false, true);
|
|
Harald Hoyer |
c4a5a0 |
free(dsthmacname);
|
|
Harald Hoyer |
c4a5a0 |
free(srchmacname);
|
|
Harald Hoyer |
c4a5a0 |
free(srcpath);
|
|
Harald Hoyer |
c4a5a0 |
@@ -336,7 +336,7 @@ static int hmac_install(const char *src, const char *dst)
|
|
Harald Hoyer |
c4a5a0 |
return 0;
|
|
Harald Hoyer |
c4a5a0 |
}
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
-static int dracut_install(const char *src, const char *dst, bool isdir, bool resolvedeps)
|
|
Harald Hoyer |
c4a5a0 |
+static int dracut_install(const char *src, const char *dst, bool isdir, bool resolvedeps, bool hashdst)
|
|
Harald Hoyer |
c4a5a0 |
{
|
|
Harald Hoyer |
c4a5a0 |
struct stat sb, db;
|
|
Harald Hoyer |
c4a5a0 |
char *dname = NULL;
|
|
Harald Hoyer |
c4a5a0 |
@@ -356,11 +356,13 @@ static int dracut_install(const char *src, const char *dst, bool isdir, bool res
|
|
Harald Hoyer |
c4a5a0 |
}
|
|
Harald Hoyer |
c4a5a0 |
}
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
- existing = hashmap_get(items, dst);
|
|
Harald Hoyer |
c4a5a0 |
- if (existing) {
|
|
Harald Hoyer |
c4a5a0 |
- if (strcmp(existing, dst) == 0) {
|
|
Harald Hoyer |
c4a5a0 |
- log_debug("hash hit items for '%s'", dst);
|
|
Harald Hoyer |
c4a5a0 |
- return 0;
|
|
Harald Hoyer |
c4a5a0 |
+ if (hashdst) {
|
|
Harald Hoyer |
c4a5a0 |
+ existing = hashmap_get(items, dst);
|
|
Harald Hoyer |
c4a5a0 |
+ if (existing) {
|
|
Harald Hoyer |
c4a5a0 |
+ if (strcmp(existing, dst) == 0) {
|
|
Harald Hoyer |
c4a5a0 |
+ log_debug("hash hit items for '%s'", dst);
|
|
Harald Hoyer |
c4a5a0 |
+ return 0;
|
|
Harald Hoyer |
c4a5a0 |
+ }
|
|
Harald Hoyer |
c4a5a0 |
}
|
|
Harald Hoyer |
c4a5a0 |
}
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
@@ -374,6 +376,7 @@ static int dracut_install(const char *src, const char *dst, bool isdir, bool res
|
|
Harald Hoyer |
c4a5a0 |
}
|
|
Harald Hoyer |
c4a5a0 |
}
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
+
|
|
Harald Hoyer |
c4a5a0 |
i = strdup(dst);
|
|
Harald Hoyer |
c4a5a0 |
hashmap_put(items, i, i);
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
@@ -408,7 +411,7 @@ static int dracut_install(const char *src, const char *dst, bool isdir, bool res
|
|
Harald Hoyer |
c4a5a0 |
log_debug("dest dir '%s' does not exist", fulldstdir);
|
|
Harald Hoyer |
c4a5a0 |
dname = strdup(dst);
|
|
Harald Hoyer |
c4a5a0 |
dname[dir_len(dname)] = '\0';
|
|
Harald Hoyer |
c4a5a0 |
- ret = dracut_install(dname, dname, true, false);
|
|
Harald Hoyer |
c4a5a0 |
+ ret = dracut_install(dname, dname, true, false, true);
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
free(dname);
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
@@ -442,7 +445,7 @@ static int dracut_install(const char *src, const char *dst, bool isdir, bool res
|
|
Harald Hoyer |
c4a5a0 |
if (abspath == NULL)
|
|
Harald Hoyer |
c4a5a0 |
return 1;
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
- if (dracut_install(abspath, abspath, false, resolvedeps)) {
|
|
Harald Hoyer |
c4a5a0 |
+ if (dracut_install(abspath, abspath, false, resolvedeps, hashdst)) {
|
|
Harald Hoyer |
c4a5a0 |
log_debug("'%s' install error", abspath);
|
|
Harald Hoyer |
c4a5a0 |
return 1;
|
|
Harald Hoyer |
c4a5a0 |
}
|
|
Harald Hoyer |
c4a5a0 |
@@ -683,7 +686,7 @@ static int install_all(int argc, char **argv)
|
|
Harald Hoyer |
c4a5a0 |
dest = strdup(newsrc);
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
log_debug("dracut_install '%s'", newsrc);
|
|
Harald Hoyer |
c4a5a0 |
- ret = dracut_install(newsrc, dest, arg_createdir, arg_resolvedeps);
|
|
Harald Hoyer |
c4a5a0 |
+ ret = dracut_install(newsrc, dest, arg_createdir, arg_resolvedeps, true);
|
|
Harald Hoyer |
c4a5a0 |
if (ret == 0) {
|
|
Harald Hoyer |
c4a5a0 |
end = true;
|
|
Harald Hoyer |
c4a5a0 |
log_debug("dracut_install '%s' OK", newsrc);
|
|
Harald Hoyer |
c4a5a0 |
@@ -694,7 +697,7 @@ static int install_all(int argc, char **argv)
|
|
Harald Hoyer |
c4a5a0 |
free(path);
|
|
Harald Hoyer |
c4a5a0 |
} else {
|
|
Harald Hoyer |
c4a5a0 |
char *dest = strdup(argv[i]);
|
|
Harald Hoyer |
c4a5a0 |
- ret = dracut_install(argv[i], dest, arg_createdir, arg_resolvedeps);
|
|
Harald Hoyer |
c4a5a0 |
+ ret = dracut_install(argv[i], dest, arg_createdir, arg_resolvedeps, true);
|
|
Harald Hoyer |
c4a5a0 |
free(dest);
|
|
Harald Hoyer |
c4a5a0 |
}
|
|
Harald Hoyer |
c4a5a0 |
|
|
Harald Hoyer |
c4a5a0 |
@@ -764,7 +767,7 @@ int main(int argc, char **argv)
|
|
Harald Hoyer |
c4a5a0 |
r = install_all(argc - optind, &argv[optind]);
|
|
Harald Hoyer |
c4a5a0 |
} else {
|
|
Harald Hoyer |
c4a5a0 |
/* simple "inst src dst" */
|
|
Harald Hoyer |
c4a5a0 |
- r = dracut_install(argv[optind], argv[optind + 1], arg_createdir, arg_resolvedeps);
|
|
Harald Hoyer |
c4a5a0 |
+ r = dracut_install(argv[optind], argv[optind + 1], arg_createdir, arg_resolvedeps, true);
|
|
Harald Hoyer |
c4a5a0 |
if ((r != 0) && (!arg_optional)) {
|
|
Harald Hoyer |
c4a5a0 |
log_error("ERROR: installing '%s' to '%s'", argv[optind], argv[optind + 1]);
|
|
Harald Hoyer |
c4a5a0 |
r = EXIT_FAILURE;
|