diff options
| author | Jiri Kosina <jkosina@suse.cz> | 2011-06-10 14:46:48 +0200 | 
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2011-06-10 14:46:57 +0200 | 
| commit | 5be5758c114b18260c6fd4c8373bf89e39b0fe82 (patch) | |
| tree | 54390f904df6ff11e570f764c444356cf2709fda /usr/gen_init_cpio.c | |
| parent | 71f66a6580c4e42df377bebbcca5c72661a40700 (diff) | |
| parent | 7f45e5cd1718ed769295033ca214032848a0097d (diff) | |
| download | olio-linux-3.10-5be5758c114b18260c6fd4c8373bf89e39b0fe82.tar.xz olio-linux-3.10-5be5758c114b18260c6fd4c8373bf89e39b0fe82.zip  | |
Merge branch 'master' into for-next
Sync with Linus' tree to be able to apply patches against new
code I have in queue.
Diffstat (limited to 'usr/gen_init_cpio.c')
| -rw-r--r-- | usr/gen_init_cpio.c | 53 | 
1 files changed, 40 insertions, 13 deletions
diff --git a/usr/gen_init_cpio.c b/usr/gen_init_cpio.c index 7f06884ecd4..af0f22fb1ef 100644 --- a/usr/gen_init_cpio.c +++ b/usr/gen_init_cpio.c @@ -22,6 +22,7 @@  static unsigned int offset;  static unsigned int ino = 721; +static time_t default_mtime;  struct file_handler {  	const char *type; @@ -102,7 +103,6 @@ static int cpio_mkslink(const char *name, const char *target,  			 unsigned int mode, uid_t uid, gid_t gid)  {  	char s[256]; -	time_t mtime = time(NULL);  	if (name[0] == '/')  		name++; @@ -114,7 +114,7 @@ static int cpio_mkslink(const char *name, const char *target,  		(long) uid,		/* uid */  		(long) gid,		/* gid */  		1,			/* nlink */ -		(long) mtime,		/* mtime */ +		(long) default_mtime,	/* mtime */  		(unsigned)strlen(target)+1, /* filesize */  		3,			/* major */  		1,			/* minor */ @@ -152,7 +152,6 @@ static int cpio_mkgeneric(const char *name, unsigned int mode,  		       uid_t uid, gid_t gid)  {  	char s[256]; -	time_t mtime = time(NULL);  	if (name[0] == '/')  		name++; @@ -164,7 +163,7 @@ static int cpio_mkgeneric(const char *name, unsigned int mode,  		(long) uid,		/* uid */  		(long) gid,		/* gid */  		2,			/* nlink */ -		(long) mtime,		/* mtime */ +		(long) default_mtime,	/* mtime */  		0,			/* filesize */  		3,			/* major */  		1,			/* minor */ @@ -242,7 +241,6 @@ static int cpio_mknod(const char *name, unsigned int mode,  		       unsigned int maj, unsigned int min)  {  	char s[256]; -	time_t mtime = time(NULL);  	if (dev_type == 'b')  		mode |= S_IFBLK; @@ -259,7 +257,7 @@ static int cpio_mknod(const char *name, unsigned int mode,  		(long) uid,		/* uid */  		(long) gid,		/* gid */  		1,			/* nlink */ -		(long) mtime,		/* mtime */ +		(long) default_mtime,	/* mtime */  		0,			/* filesize */  		3,			/* major */  		1,			/* minor */ @@ -460,7 +458,7 @@ static int cpio_mkfile_line(const char *line)  static void usage(const char *prog)  {  	fprintf(stderr, "Usage:\n" -		"\t%s <cpio_list>\n" +		"\t%s [-t <timestamp>] <cpio_list>\n"  		"\n"  		"<cpio_list> is a file containing newline separated entries that\n"  		"describe the files to be included in the initramfs archive:\n" @@ -491,7 +489,11 @@ static void usage(const char *prog)  		"nod /dev/console 0600 0 0 c 5 1\n"  		"dir /root 0700 0 0\n"  		"dir /sbin 0755 0 0\n" -		"file /sbin/kinit /usr/src/klibc/kinit/kinit 0755 0 0\n", +		"file /sbin/kinit /usr/src/klibc/kinit/kinit 0755 0 0\n" +		"\n" +		"<timestamp> is time in seconds since Epoch that will be used\n" +		"as mtime for symlinks, special files and directories. The default\n" +		"is to use the current time for these entries.\n",  		prog);  } @@ -529,17 +531,42 @@ int main (int argc, char *argv[])  	char *args, *type;  	int ec = 0;  	int line_nr = 0; +	const char *filename; + +	default_mtime = time(NULL); +	while (1) { +		int opt = getopt(argc, argv, "t:h"); +		char *invalid; -	if (2 != argc) { +		if (opt == -1) +			break; +		switch (opt) { +		case 't': +			default_mtime = strtol(optarg, &invalid, 10); +			if (!*optarg || *invalid) { +				fprintf(stderr, "Invalid timestamp: %s\n", +						optarg); +				usage(argv[0]); +				exit(1); +			} +			break; +		case 'h': +		case '?': +			usage(argv[0]); +			exit(opt == 'h' ? 0 : 1); +		} +	} + +	if (argc - optind != 1) {  		usage(argv[0]);  		exit(1);  	} - -	if (!strcmp(argv[1], "-")) +	filename = argv[optind]; +	if (!strcmp(filename, "-"))  		cpio_list = stdin; -	else if (! (cpio_list = fopen(argv[1], "r"))) { +	else if (!(cpio_list = fopen(filename, "r"))) {  		fprintf(stderr, "ERROR: unable to open '%s': %s\n\n", -			argv[1], strerror(errno)); +			filename, strerror(errno));  		usage(argv[0]);  		exit(1);  	}  |