chiark / gitweb /
[PATCH] fix test for temporary nodes
[elogind.git] / udev_utils.c
index 3c5344a8f987782e23d432984f7ec2ac71ff5aa3..fda1f42f7e0272c8957822a8e2be107b4ba20c9d 100644 (file)
@@ -62,11 +62,11 @@ void udev_init_device(struct udevice *udev, const char* devpath, const char *sub
        strcpy(udev->group, "root");
 }
 
-int kernel_release_satisfactory(int version, int patchlevel, int sublevel)
+int kernel_release_satisfactory(unsigned int version, unsigned int patchlevel, unsigned int sublevel)
 {
-       static int kversion = 0;
-       static int kpatchlevel;
-       static int ksublevel;
+       static unsigned int kversion = 0;
+       static unsigned int kpatchlevel;
+       static unsigned int ksublevel;
 
        if (kversion == 0) {
                struct utsname uts;
@@ -112,6 +112,31 @@ int create_path(const char *path)
        return mkdir(p, 0755);
 }
 
+/* Reset permissions on the device node, before unlinking it to make sure,
+ * that permisions of possible hard links will be removed too.
+ */
+int unlink_secure(const char *filename)
+{
+       int retval;
+
+       retval = chown(filename, 0, 0);
+       if (retval)
+               dbg("chown(%s, 0, 0) failed with error '%s'", filename, strerror(errno));
+
+       retval = chmod(filename, 0000);
+       if (retval)
+               dbg("chmod(%s, 0000) failed with error '%s'", filename, strerror(errno));
+
+       retval = unlink(filename);
+       if (errno == ENOENT)
+               retval = 0;
+
+       if (retval)
+               dbg("unlink(%s) failed with error '%s'", filename, strerror(errno));
+
+       return retval;
+}
+
 int parse_get_pair(char **orig_string, char **left, char **right)
 {
        char *temp;
@@ -200,11 +225,11 @@ size_t buf_get_line(const char *buf, size_t buflen, size_t cur)
 
 void no_trailing_slash(char *path)
 {
-       int len;
+       size_t len;
 
        len = strlen(path);
-       if (len > 0 && path[len-1] == '/')
-               path[len-1] = '\0';
+       while (len > 0 && path[len-1] == '/')
+               path[--len] = '\0';
 }
 
 struct files {