makedevs: make special node creation idempotent
When makedevs is called for a second time with the same device file, it fails because the files already exist and mknod() gives -EEXIST. Ignore EEXIST errors. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		@@ -157,8 +157,11 @@ int makedevs_main(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
		/* if mode != S_IFCHR and != S_IFBLK,
 | 
			
		||||
		 * third param in mknod() ignored */
 | 
			
		||||
		if (mknod(nodname, mode, makedev(Smajor, Sminor)))
 | 
			
		||||
		if (mknod(nodname, mode, makedev(Smajor, Sminor)) != 0
 | 
			
		||||
		 && errno != EEXIST
 | 
			
		||||
		) {
 | 
			
		||||
			bb_perror_msg("can't create '%s'", nodname);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/*if (nodname == basedev)*/ /* ex. /dev/hda - to /dev/hda1 ... */
 | 
			
		||||
			nodname = buf;
 | 
			
		||||
@@ -279,7 +282,9 @@ int makedevs_main(int argc UNUSED_PARAM, char **argv)
 | 
			
		||||
			for (i = start; i <= start + count; i++) {
 | 
			
		||||
				sprintf(full_name_inc, count ? "%s%u" : "%s", full_name, i);
 | 
			
		||||
				rdev = makedev(major, minor + (i - start) * increment);
 | 
			
		||||
				if (mknod(full_name_inc, mode, rdev) < 0) {
 | 
			
		||||
				if (mknod(full_name_inc, mode, rdev) != 0
 | 
			
		||||
				  && errno != EEXIST
 | 
			
		||||
				) {
 | 
			
		||||
					bb_perror_msg("line %d: can't create node %s", linenum, full_name_inc);
 | 
			
		||||
					ret = EXIT_FAILURE;
 | 
			
		||||
				} else if (chown(full_name_inc, uid, gid) < 0) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user