check sync_fp before calling fclose().
[unix-history] / usr / src / games / sail / sync.c
index b23fa0c..3cde4d1 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)sync.c      1.1 83/10/10";
+static char *sccsid = "@(#)sync.c      2.2 83/11/01";
 #endif
 
 #include "externs.h"
 #endif
 
 #include "externs.h"
@@ -30,12 +30,23 @@ register struct ship *ship;
        Write(W_SIGNAL, from, 1, (int)message, 0, 0, 0);
 }
 
        Write(W_SIGNAL, from, 1, (int)message, 0, 0, 0);
 }
 
+#include <sys/types.h>
+#include <sys/stat.h>
 sync_exists(game)
 {
        char buf[sizeof sync_file];
 sync_exists(game)
 {
        char buf[sizeof sync_file];
+       struct stat s;
+       time_t t;
 
        (void) sprintf(buf, SF, game);
 
        (void) sprintf(buf, SF, game);
-       return access(buf, 0) >= 0;
+       time(&t);
+       if (stat(buf, &s) < 0)
+               return 0;
+       if (s.st_mtime < t - 60*60*2) {         /* 2 hours */
+               unlink(buf);
+               return 0;
+       } else
+               return 1;
 }
 
 sync_open()
 }
 
 sync_open()
@@ -56,12 +67,14 @@ sync_open()
        if (sync_fp == 0)
                return -1;
        sync_seek == 0;
        if (sync_fp == 0)
                return -1;
        sync_seek == 0;
+       return 0;
 }
 
 sync_close(remove)
 char remove;
 {
 }
 
 sync_close(remove)
 char remove;
 {
-       (void) fclose(sync_fp);
+       if (sync_fp != 0)
+               (void) fclose(sync_fp);
        if (remove)
                (void) unlink(sync_file);
 }
        if (remove)
                (void) unlink(sync_file);
 }
@@ -166,9 +179,9 @@ int a, b, c, d;
                break;
                }
        case W_SIGNAL:
                break;
                }
        case W_SIGNAL:
-               (void) strncpy(ship->file->signal, (char *)a,
-                       sizeof ship->file->signal - 1);
-               ship->file->signal[sizeof ship->file->signal - 1] = 0;
+               if (isplayer) {
+                       Signal("\7%s (%c%c): %s", ship, a);
+               }
                break;
        case W_CREW: {
                register struct shipspecs *s = ship->specs;
                break;
        case W_CREW: {
                register struct shipspecs *s = ship->specs;
@@ -183,7 +196,10 @@ int a, b, c, d;
                ship->file->captain[sizeof ship->file->captain - 1] = 0;
                break;
        case W_CAPTURED:
                ship->file->captain[sizeof ship->file->captain - 1] = 0;
                break;
        case W_CAPTURED:
-               ship->file->captured = SHIP(a);
+               if (a < 0)
+                       ship->file->captured = 0;
+               else
+                       ship->file->captured = SHIP(a);
                break;
        case W_CLASS:
                ship->specs->class = a;
                break;
        case W_CLASS:
                ship->specs->class = a;