break;
case CMD_SOUND:
- /* Play the sound, then free its dr.file name. */
+ /* Play the sound. */
if (cmd->sound.n)
- {
audio_play(cmd->sound.n, cmd->sound.a);
- /*
- * FIXME Command memory management should be done
- * elsewhere and done properly.
- */
-
- free(cmd->sound.n);
- }
break;
case CMD_TIMER:
* map.)
*/
- free(cmd->map.name);
game_compat_map = version.x == cmd->map.version.x;
break;
while ((cmdp = game_proxy_deq()))
{
- /*
- * Note: cmd_put is called first here because game_run_cmd
- * frees some command struct members.
- */
-
if (demo_fp)
cmd_put(demo_fp, cmdp);
game_run_cmd(cmdp);
- free(cmdp);
+ cmd_free(cmdp);
}
}
union cmd *cmdp;
while ((cmdp = game_proxy_deq()))
- free(cmdp);
+ cmd_free(cmdp);
}
}
/*---------------------------------------------------------------------------*/
+
+void cmd_free(union cmd *cmd)
+{
+ if (cmd)
+ {
+ switch (cmd->type)
+ {
+ case CMD_SOUND:
+ free(cmd->sound.n);
+ break;
+
+ case CMD_MAP:
+ free(cmd->map.name);
+ break;
+
+ default:
+ break;
+ }
+
+ free(cmd);
+ }
+}
+
+/*---------------------------------------------------------------------------*/
int cmd_put(fs_file, const union cmd *);
int cmd_get(fs_file, union cmd *);
+void cmd_free(union cmd *);
+
#endif