/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2008, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Copyright (C) 1986-2009, Dave Pare, Jeff Bailey, Thomas Ruschak,
* Ken Stevens, Steve McClure
*
* This program is free software; you can redistribute it and/or modify
* ---
*
* cargo.c: Cargo lists
- *
+ *
* Known contributors to this file:
* Markus Armbruster, 2008
*/
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
#include "file.h"
#include "unit.h"
return;
if (CANT_HAPPEN(*head >= nclink[type]))
*head = -1;
+ CANT_HAPPEN(clink[type][uid].next >= 0);
clink[type][uid].next = *head;
*head = uid;
}
}
*p = linkv[uid].next;
+ linkv[uid].next = -1;
}
/*
{
if (CANT_HAPPEN(type < 0 || type > EF_NUKE))
return;
- if (old >= 0)
+ if (old >= 0 && !CANT_HAPPEN(old >= nclink[type]))
clink_rem(&clink[type][old], cargo->ef_type, cargo->uid);
- if (new >= 0)
+ if (new >= 0 && !CANT_HAPPEN(new >= nclink[type]))
clink_add(&clink[type][new], cargo->ef_type, cargo->uid);
}
struct lndstr *lp;
struct nukstr *np;
- for (i = EF_SHIP; i <= EF_NUKE; i++) {
- nclink[i] = 0;
+ memset(nclink, 0, sizeof(nclink));
+ for (i = EF_SHIP; i <= EF_NUKE; i++)
unit_onresize(i);
- }
for (i = 0; (pp = getplanep(i)); i++) {
if (!pp->pln_own)
clink_init(&cl[i]);
clink[type] = cl;
nclink[type] = n;
- clink_check(type);
+ if (ef_flags(type) & EFF_MEM)
+ clink_check(type);
return 0;
}