- gen_init_cpio-expand-shell-variables-in-file-names.patch removed from -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The patch titled
     gen_init_cpio: expand shell variables in file names
has been removed from the -mm tree.  Its filename was
     gen_init_cpio-expand-shell-variables-in-file-names.patch

This patch was dropped because it was merged into mainline or a subsystem tree

The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/

------------------------------------------------------
Subject: gen_init_cpio: expand shell variables in file names
From: "Sally, Gene" <Gene.Sally@xxxxxxxxxxx>

This modifies gen_init_cpio so that lines that specify files can contain
what looks like a shell variable that's expanded during processing.

For example:

file /sbin/kinit ${RFS_BASE}/usr/src/klibc/kinit/kinit 0755 0 0

given RFS_BASE is "/some/directory" in the environment

would be expanded to

file /sbin/kinit /some/directory/usr/src/klibc/kinit/kinit 0755 0 0

If several environment variables appear in a line, they are all expanded
with processing happening from left to right.  Undefined variables expand
to a null string.  Syntax errors stop processing, letting the existing
error handling show the user offending line.

This helps embedded folks who frequently create several RFS directories
and then switch between them as they're tuning an initramfs.  Having just
been such an embedded folk, this seems the most efficient solution.

Signed-off-by: Gene Sally <gene.sally@xxxxxxxxxxx>
Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
---

 usr/gen_init_cpio.c |   28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff -puN usr/gen_init_cpio.c~gen_init_cpio-expand-shell-variables-in-file-names usr/gen_init_cpio.c
--- a/usr/gen_init_cpio.c~gen_init_cpio-expand-shell-variables-in-file-names
+++ a/usr/gen_init_cpio.c
@@ -370,6 +370,30 @@ error:
 	return rc;
 }
 
+static char *cpio_replace_env(char *new_location)
+{
+       char expanded[PATH_MAX + 1];
+       char env_var[PATH_MAX + 1];
+       char *start;
+       char *end;
+
+       for (start = NULL; (start = strstr(new_location, "${")); ) {
+	       end = strchr(start, '}');
+	       if (start < end) {
+		       *env_var = *expanded = '\0';
+		       strncat(env_var, start + 2, end - start - 2);
+		       strncat(expanded, new_location, start - new_location);
+		       strncat(expanded, getenv(env_var), PATH_MAX);
+		       strncat(expanded, end + 1, PATH_MAX);
+		       strncpy(new_location, expanded, PATH_MAX);
+	       } else
+		       break;
+       }
+
+       return new_location;
+}
+
+
 static int cpio_mkfile_line(const char *line)
 {
 	char name[PATH_MAX + 1];
@@ -415,7 +439,8 @@ static int cpio_mkfile_line(const char *
 	} else {
 		dname = name;
 	}
-	rc = cpio_mkfile(dname, location, mode, uid, gid, nlinks);
+       rc = cpio_mkfile(dname, cpio_replace_env(location),
+			mode, uid, gid, nlinks);
  fail:
 	if (dname_len) free(dname);
 	return rc;
@@ -439,6 +464,7 @@ void usage(const char *prog)
 		"\n"
 		"<name>       name of the file/dir/nod/etc in the archive\n"
 		"<location>   location of the file in the current filesystem\n"
+		"             expands shell variables quoted with ${}\n"
 		"<target>     link target\n"
 		"<mode>       mode/permissions of the file\n"
 		"<uid>        user id (0=root)\n"
_

Patches currently in -mm which might be from Gene.Sally@xxxxxxxxxxx are

linux-next.patch

--
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Newbies FAQ]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux