]> git.tdb.fi Git - pmount-gui.git/blobdiff - main.c
Use stat instead of access to check for udevadm presence
[pmount-gui.git] / main.c
diff --git a/main.c b/main.c
index dd54ec5c1d350af903b0854f15545bb09c87a052..9172ab6d7b9d049c6c432b063e24c1f82caa2d93 100644 (file)
--- a/main.c
+++ b/main.c
@@ -83,6 +83,7 @@ the array.
 */
 Property *get_device_properties(char *node)
 {
+       static const char *udevadm_path = NULL;
        int pid;
        int pipe_fd[2];
        char *buf;
@@ -92,6 +93,22 @@ Property *get_device_properties(char *node)
        Property *props = NULL;
        int n_props = 0;
 
+       if(!udevadm_path)
+       {
+               struct stat st;
+               udevadm_path = "/bin/udevadm";
+               if(stat(udevadm_path, &st)<0 || !(st.st_mode&0111))
+               {
+                       udevadm_path = "/sbin/udevadm";
+                       if(stat(udevadm_path, &st)<0 || !(st.st_mode&0111))
+                       {
+                               udevadm_path = NULL;
+                               perror("Unable to find udevadm");
+                               return NULL;
+                       }
+               }
+       }
+
        pipe(pipe_fd);
 
        pid = fork();
@@ -104,7 +121,9 @@ Property *get_device_properties(char *node)
                close(pipe_fd[0]);
                dup2(pipe_fd[1], 1);
 
-               execl("/sbin/udevadm", "udevadm", "info", "-q", "property", "-n", node, NULL);
+               if(execl(udevadm_path, "udevadm", "info", "-q", "property", "-n", node, NULL)<0)
+                       fprintf(stderr, "Unable to execute %s: %s\n", udevadm_path, strerror(errno));
+
                _exit(1);
        }
        else if(pid<0)
@@ -524,7 +543,6 @@ Device *get_devices(void)
        char **nodes = NULL;
        Device *devices = NULL;
        int n_devices = 0;
-       char **mounted = NULL;
        char **fstab = NULL;
        int i;
 
@@ -543,6 +561,7 @@ Device *get_devices(void)
                {
                        if(verbosity>=2)
                                printf("  No properties\n");
+                       free(nodes[i]);
                        continue;
                }
 
@@ -608,7 +627,7 @@ Device *get_devices(void)
        }
 
        free(nodes);
-       free_string_array(mounted);
+       free_string_array(fstab);
 
        if(devices)
        {
@@ -1045,6 +1064,7 @@ int main(int argc, char **argv)
        int opt;
        int umount = 0;
        int n_listed;
+       int i;
 
        context.manager = 0;
        context.autohide = 0;