From 2c769c69b269f43d8c9ecf4a7f5ce5cce290750a Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 27 Nov 2016 23:27:54 +0100 Subject: 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 --- miscutils/makedevs.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'miscutils/makedevs.c') diff --git a/miscutils/makedevs.c b/miscutils/makedevs.c index 6278ee77c..c5eeed0e0 100644 --- a/miscutils/makedevs.c +++ b/miscutils/makedevs.c @@ -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) { -- cgit v1.2.3