]> code.ossystems Code Review - openembedded-core.git/commitdiff
makedevs: Do not return error if the fifo exisits
authorSaul Wold <sgw@linux.intel.com>
Tue, 1 Oct 2013 16:57:52 +0000 (16:57 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Tue, 1 Oct 2013 21:54:33 +0000 (22:54 +0100)
This ensures that makedevs will not cause image creation failures
when it encounters a pipe (fifo) that exists from a previous image.
This handles mode changes and it will correctly fail for dangling
symlinks.

[YOCTO #5288]

Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-devtools/makedevs/makedevs-1.0.0/makedevs.c

index 5d2c45b310a3f94052663e037ed095bff877c81e..53700c687f304df21b8789498681671057100d40 100644 (file)
@@ -274,8 +274,20 @@ static void add_new_file(char *name, char *path, unsigned long uid,
 static void add_new_fifo(char *name, char *path, unsigned long uid,
                                  unsigned long gid, unsigned long mode)
 {
-       if (mknod(path, mode, 0))
-               error_msg_and_die("%s: file can not be created with mknod!", path);
+       int status;
+       struct stat sb;
+
+       memset(&sb, 0, sizeof(struct stat));
+       status = stat(path, &sb);
+
+
+       /* Update the mode if we exist and are a fifo already */
+       if (status >= 0 && S_ISFIFO(sb.st_mode)) {
+               chmod(path, mode);
+       } else {
+               if (mknod(path, mode, 0))
+                       error_msg_and_die("%s: file can not be created with mknod!", path);
+       }
        chown(path, uid, gid);
 //     printf("File: %s %s  UID: %ld  GID: %ld  MODE: %04lo\n",
 //                     path, name, gid, uid, mode);