Add a nonfatal() function everywhere, to be used for reporting things
[u/mdw/putty] / windows / winplink.c
index 5806335..37453bb 100644 (file)
@@ -49,6 +49,19 @@ void modalfatalbox(char *p, ...)
     }
     cleanup_exit(1);
 }
+void nonfatal(char *p, ...)
+{
+    va_list ap;
+    fprintf(stderr, "ERROR: ");
+    va_start(ap, p);
+    vfprintf(stderr, p, ap);
+    va_end(ap);
+    fputc('\n', stderr);
+    if (logctx) {
+        log_free(logctx);
+        logctx = NULL;
+    }
+}
 void connection_fatal(void *frontend, char *p, ...)
 {
     va_list ap;
@@ -289,7 +302,7 @@ int main(int argc, char **argv)
     int errors;
     int got_host = FALSE;
     int use_subsystem = 0;
-    long now, next;
+    unsigned long now, next, then;
 
     sklist = NULL;
     skcount = sksize = 0;
@@ -343,8 +356,10 @@ int main(int argc, char **argv)
            } else if (!strcmp(p, "-s")) {
                /* Save status to write to conf later. */
                use_subsystem = 1;
-           } else if (!strcmp(p, "-V")) {
+           } else if (!strcmp(p, "-V") || !strcmp(p, "--version")) {
                 version();
+           } else if (!strcmp(p, "--help")) {
+                usage();
             } else if (!strcmp(p, "-pgpfp")) {
                 pgp_fingerprints();
                 exit(1);
@@ -634,8 +649,12 @@ int main(int argc, char **argv)
        }
 
        if (run_timers(now, &next)) {
-           ticks = next - GETTICKCOUNT();
-           if (ticks < 0) ticks = 0;  /* just in case */
+           then = now;
+           now = GETTICKCOUNT();
+           if (now - then > next - then)
+               ticks = 0;
+           else
+               ticks = next - now;
        } else {
            ticks = INFINITE;
        }