X-Git-Url: http://git.tdb.fi/?p=pmount-gui.git;a=blobdiff_plain;f=main.c;h=63921300b2bf373105ae557e773295b0d74489c4;hp=609db229f90787cd076fa1d245b6c6d864ceb99b;hb=a82201f388e8d4b4b5b10b9547c3ee3a4e488586;hpb=03333fb47e0bc27da1f74313618d4acf8ee10847 diff --git a/main.c b/main.c index 609db22..6392130 100644 --- a/main.c +++ b/main.c @@ -1,3 +1,5 @@ +/* Required for strdup, snprintf, getopt */ +#define _XOPEN_SOURCE 500 #include #include #include @@ -7,6 +9,7 @@ #include #include #include +#include #include #include @@ -427,10 +430,12 @@ Device *get_devices(void) for(i=0; nodes[i]; ++i) { + Property *props; + if(verbosity>=1) printf("Examining device %s\n", nodes[i]); - Property *props = get_device_properties(nodes[i]); + props = get_device_properties(nodes[i]); if(!props) { if(verbosity>=2) @@ -566,22 +571,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;