Add -V switch to various programs for displaying version info.
[doldaconnect.git] / clients / gui-shell / dsh.c
index 652e45e..40ee546 100644 (file)
@@ -55,6 +55,7 @@ struct trinfo {
 void updatewrite(void);
 
 int remote = 0;
+char *server;
 GtkStatusIcon *tray;
 pid_t dpid = 0, dcpid = 0;
 int connected = 0;
@@ -382,7 +383,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 +396,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 +404,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 +424,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 +554,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");