X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=main.c;h=916c2e214fce6c636c6eaf5889a012231af990eb;hb=0bf882489848c7f19eb602e286d760c709685251;hp=2609341f6c870eef728bd6e08f966958fa460baa;hpb=1121a543689042e89206fb27a52d2d8f6d97a8bb;p=pmount-gui.git diff --git a/main.c b/main.c index 2609341..916c2e2 100644 --- a/main.c +++ b/main.c @@ -313,12 +313,15 @@ int can_mount(Property *props, char **allowed) static char *removable_buses[] = { "usb", "firewire", 0 }; char *devname; char *devpath; - int i; + char *bus; devname = get_property_value(props, "DEVNAME"); if(is_in_array(allowed, devname)) return 1; + if(match_property_value(props, "ID_TYPE", "cd") && match_property_value(props, "ID_CDROM_MEDIA", "1")) + return 1; + if(!match_property_value(props, "DEVTYPE", "partition")) return 0; @@ -326,9 +329,9 @@ int can_mount(Property *props, char **allowed) if(is_removable(devpath)) return 1; - for(i=0; removable_buses[i]; ++i) - if(match_property_value(props, "ID_BUS", removable_buses[i])) - return 1; + bus = get_property_value(props, "ID_BUS"); + if(is_in_array(removable_buses, bus)) + return 1; return check_buses(devpath, removable_buses); } @@ -563,22 +566,32 @@ void row_activated(GtkTreeView *list, GtkTreePath *path, GtkTreeViewColumn *colu char buf[1024]; int pos = 0; int status; + fd_set fds; + struct timeval timeout; close(pipe_fd[1]); + FD_ZERO(&fds); + FD_SET(pipe_fd[0], &fds); + timeout.tv_sec = 0; + timeout.tv_usec = 200000; while(1) { - int len; + if(select(pipe_fd[0]+1, &fds, NULL, NULL, &timeout)) + { + int len; - len = read(pipe_fd[0], buf+pos, sizeof(buf)-pos-1); - if(len<=0) + len = read(pipe_fd[0], buf+pos, sizeof(buf)-pos-1); + if(len<=0) + break; + pos += len; + } + else if(waitpid(pid, &status, 0)) break; - pos += len; } buf[pos] = 0; - waitpid(pid, &status, 0); if(!WIFEXITED(status) || WEXITSTATUS(status)) { GtkWidget *dialog;