diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-10 08:27:52 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-10 08:27:52 -0800 | 
| commit | 0c05384a5a1af2352b8c244cf32f480ba6cbf024 (patch) | |
| tree | 5090f9d2d07d0bccae3144bb0cdbdf15e8555013 /usr | |
| parent | 1542dec1c9109fdcd1c53460f064096f24fc49d2 (diff) | |
| parent | bc91c9f313309915f6ec767f56f78dcd0305b20f (diff) | |
| download | linux-0c05384a5a1af2352b8c244cf32f480ba6cbf024.tar.bz2 | |
Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6
* 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6:
  mkuboot.sh: Fail if mkimage is missing
  gen_init_cpio: checkpatch fixes
  gen_init_cpio: Avoid race between call to stat() and call to open()
  modpost: Fix address calculation in reloc_location()
  Make fixdep error handling more explicit
  checksyscalls: Fix stand-alone usage
  modpost: Put .zdebug* section on white list
  kbuild: fix interaction of CONFIG_IKCONFIG and KCONFIG_CONFIG
  kbuild: export linux/{a.out,kvm,kvm_para}.h on headers_install_all
  kbuild: introduce HDR_ARCH_LIST for headers_install_all
  headers_install: check exit status of unifdef
  gen_init_cpio: remove leading `/' from file names
  scripts/genksyms: fix header usage
  fixdep: use hash table instead of a single array
Diffstat (limited to 'usr')
| -rw-r--r-- | usr/gen_init_cpio.c | 20 | 
1 files changed, 14 insertions, 6 deletions
diff --git a/usr/gen_init_cpio.c b/usr/gen_init_cpio.c index b2b3c2d1cf8b..7f06884ecd41 100644 --- a/usr/gen_init_cpio.c +++ b/usr/gen_init_cpio.c @@ -104,6 +104,8 @@ static int cpio_mkslink(const char *name, const char *target,  	char s[256];  	time_t mtime = time(NULL); +	if (name[0] == '/') +		name++;  	sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX"  	       "%08X%08X%08X%08X%08X%08X%08X",  		"070701",		/* magic */ @@ -152,6 +154,8 @@ static int cpio_mkgeneric(const char *name, unsigned int mode,  	char s[256];  	time_t mtime = time(NULL); +	if (name[0] == '/') +		name++;  	sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX"  	       "%08X%08X%08X%08X%08X%08X%08X",  		"070701",		/* magic */ @@ -245,6 +249,8 @@ static int cpio_mknod(const char *name, unsigned int mode,  	else  		mode |= S_IFCHR; +	if (name[0] == '/') +		name++;  	sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX"  	       "%08X%08X%08X%08X%08X%08X%08X",  		"070701",		/* magic */ @@ -303,18 +309,18 @@ static int cpio_mkfile(const char *name, const char *location,  	mode |= S_IFREG; -	retval = stat (location, &buf); -	if (retval) { -		fprintf (stderr, "File %s could not be located\n", location); -		goto error; -	} -  	file = open (location, O_RDONLY);  	if (file < 0) {  		fprintf (stderr, "File %s could not be opened for reading\n", location);  		goto error;  	} +	retval = fstat(file, &buf); +	if (retval) { +		fprintf(stderr, "File %s could not be stat()'ed\n", location); +		goto error; +	} +  	filebuf = malloc(buf.st_size);  	if (!filebuf) {  		fprintf (stderr, "out of memory\n"); @@ -332,6 +338,8 @@ static int cpio_mkfile(const char *name, const char *location,  		/* data goes on last link */  		if (i == nlinks) size = buf.st_size; +		if (name[0] == '/') +			name++;  		namesize = strlen(name) + 1;  		sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX"  		       "%08lX%08X%08X%08X%08X%08X%08X",  |