]> skyeroc.xyz Git - dgamelaunch/commitdiff
Free populated games.
authorPasi Kallinen <paxed@alt.org>
Sun, 18 Oct 2009 08:39:19 +0000 (08:39 +0000)
committerPasi Kallinen <paxed@alt.org>
Sun, 18 Oct 2009 08:39:19 +0000 (08:39 +0000)
git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@476 db0b04b0-f4d1-0310-9a6d-de3e77497b0e

dgamelaunch.c
dgamelaunch.h
dgl-common.c

index 5f9f9ff6ce6e1aac63703b040e582e7e8a6cfa18..c9ad3cecca79b32d822b6452639cb2bff0af6d02 100644 (file)
@@ -375,7 +375,7 @@ inprogressmenu (int gameid)
   int i, menuchoice, len = 20, offset = 0, doresizewin = 0;
   static dg_sortmode sortmode = NUM_SORTMODES;
   time_t ctime;
-  struct dg_game **games;
+  struct dg_game **games = NULL;
   char ttyrecname[130], *replacestr = NULL, gametype[10];
   int *is_nhext;
   sigset_t oldmask, toblock;
@@ -405,7 +405,7 @@ inprogressmenu (int gameid)
        max_height = local_LINES - 10;
        if (max_height < 2) {
            free(is_nhext);
-           /* TODO: free games[] */
+           free_populated_games(games, len);
            return;
        }
        if (max_height > abs_max_height) max_height = abs_max_height;
@@ -507,6 +507,7 @@ inprogressmenu (int gameid)
        case ERR:
        case 'q': case 'Q':
            if (is_nhext) free(is_nhext);
+           free_populated_games(games, len);
           return;
 
        case '.':
@@ -597,6 +598,7 @@ watchgame:
       games = sort_games (games, len, sortmode);
     }
   if (is_nhext) free(is_nhext);
+  free_populated_games(games, len);
 }
 
 /* ************************************************************* */
@@ -769,7 +771,7 @@ void
 wall_email(char *from, char *msg)
 {
     int len, i;
-    struct dg_game **games;
+    struct dg_game **games = NULL;
     char spool_fn[1024+1];
     FILE *user_spool = NULL;
     struct flock fl = { 0 };
@@ -817,6 +819,7 @@ wall_email(char *from, char *msg)
        fprintf(user_spool, "%s:%s\n", from, msg);
        fclose(user_spool);
     }
+    free_populated_games(games, len);
 }
 
 void
@@ -1874,7 +1877,7 @@ authenticate ()
 {
   int i, len, me_index;
   char user_buf[22], pw_buf[22];
-  struct dg_game **games;
+  struct dg_game **games = NULL;
 
   /* We use simple password authentication, rather than challenge/response. */
   printf ("\n");
@@ -1911,10 +1914,12 @@ authenticate ()
            if (!strcmp (games[i]->name, user_buf))
              {
                fprintf (stderr, "Game already in progress.\n");
+               free_populated_games(games, len);
                return 1;
              }
          win.ws_row = win.ws_col = 0;
          gen_inprogress_lock (0, getppid (), gen_nhext_filename ());
+         free_populated_games(games, len);
          return 0;
        }
       }
@@ -1922,6 +1927,7 @@ authenticate ()
 
   sleep (2);
   fprintf (stderr, "Login failed.\n");
+  free_populated_games(games, len);
   return 1;
 }
 
index 290634c36f01cb8067782a1b79569f3e8a43b0fd..e9b59583d60ab8b1b500d6737029a29098ddb895 100644 (file)
@@ -195,6 +195,7 @@ extern struct dg_menu *dgl_find_menu(char *menuname);
 
 extern int dgl_exec_cmdqueue(struct dg_cmdpart *queue, int game, struct dg_user *me);
 
+extern void free_populated_games(struct dg_game **games, int len);
 extern struct dg_game **populate_games(int game, int *l, struct dg_user *me);
 
 #ifdef USE_DEBUGFILE
index 85614a61a514fb6351242ce54b062efba30067fb..4c97caa5c159bef26d6c4959cd06d92f4145b904 100644 (file)
@@ -403,6 +403,22 @@ debug_write(char *str)
 }
 #endif /* USE_DEBUGFILE */
 
+void
+free_populated_games(struct dg_game **games, int len)
+{
+    int i;
+    if (!games || (len < 1)) return;
+
+    for (i = 0; i < len; i++) {
+       if (games[i]->ttyrec_fn) free(games[i]->ttyrec_fn);
+       if (games[i]->name) free(games[i]->name);
+       if (games[i]->date) free(games[i]->date);
+       if (games[i]->time) free(games[i]->time);
+       free(games[i]);
+    }
+    free(games);
+}
+
 struct dg_game **
 populate_games (int xgame, int *l, struct dg_user *me)
 {