X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=clients%2Fgui-shell%2Fdsh.c;h=8e10cc8508816d102cbd8c0e2ebf87ae7758d029;hb=e2d7583a815eb74b97180838590cbb37fd5f1f91;hp=652e45e2dbd4fc3a6dadf863214b675df78e461f;hpb=05ac1f105db40c360508f324dd1af7f828024e94;p=doldaconnect.git diff --git a/clients/gui-shell/dsh.c b/clients/gui-shell/dsh.c index 652e45e..8e10cc8 100644 --- a/clients/gui-shell/dsh.c +++ b/clients/gui-shell/dsh.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -46,7 +47,8 @@ struct trinfo { int ostate; - int opos, spos, speed; + intmax_t opos, spos; + int speed; time_t lastprog; int warned; double sprog; @@ -55,6 +57,7 @@ struct trinfo { void updatewrite(void); int remote = 0; +char *server; GtkStatusIcon *tray; pid_t dpid = 0, dcpid = 0; int connected = 0; @@ -201,7 +204,8 @@ void updatetooltip(void) { struct dc_transfer *tr; struct trinfo *tri; - int t, i, a, st, bc, bt; + int t, i, a, st; + intmax_t bc, bt; char *buf; size_t bufsize, bufdata; @@ -382,7 +386,7 @@ void updatewrite(void) void connectdc(void) { - if((dcfd = dc_connect(remote?NULL:dc_srv_local)) < 0) { + if((dcfd = dc_connect(server)) < 0) { msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Could not connect to server: %s"), strerror(errno)); exit(1); } @@ -395,6 +399,7 @@ void startdaemon(void) { char pf[1024]; int pfd[2], i; + sigset_t ss; if(getenv("HOME") != NULL) snprintf(pf, sizeof(pf), "%s/.doldacond.pid", getenv("HOME")); @@ -402,7 +407,11 @@ void startdaemon(void) snprintf(pf, sizeof(pf), "%s/.doldacond.pid", getpwuid(getuid())->pw_dir); if(access(pf, F_OK) || !running(pf)) { pipe(pfd); + sigemptyset(&ss); + sigaddset(&ss, SIGCHLD); + sigprocmask(SIG_BLOCK, &ss, NULL); if((dpid = fork()) == 0) { + sigprocmask(SIG_UNBLOCK, &ss, NULL); dup2(pfd[1], 2); for(i = 3; i < FD_SETSIZE; i++) close(i); @@ -418,6 +427,7 @@ void startdaemon(void) create_start_wnd(); gtk_widget_show(start_wnd); gtk_status_icon_set_tooltip(tray, _("Starting...")); + sigprocmask(SIG_UNBLOCK, &ss, NULL); } else { connectdc(); } @@ -547,19 +557,29 @@ int main(int argc, char **argv) textdomain(PACKAGE); signal(SIGCHLD, sighandler); dc_init(); + server = dc_srv_local; gtk_init(&argc, &argv); #ifdef HAVE_NOTIFY notify_init("Dolda Connect"); #endif - while((c = getopt(argc, argv, "rh")) != -1) { + while((c = getopt(argc, argv, "Vrhs:")) != -1) { switch(c) { case 'r': remote = 1; + server = NULL; + break; + case 's': + remote = 1; + server = optarg; break; case 'h': printf("usage: doldacond-shell [-hr]\n"); printf("\t-h\tDisplay this help message\n"); printf("\t-r\tConnect to a remote host\n"); + printf("\t-V\tDisplay version info and exit\n"); + exit(0); + case 'V': + printf("%s", RELEASEINFO); exit(0); default: fprintf(stderr, "usage: doldacond-shell [-hr]\n");