Fix marking of unused trade slots

Trade code can't quite decide whether negative trd_unitid or zero
trd_owner marks unused slots.  The former is a bad idea, because blank
slots have a zero trd_unitid.

Make sure to zero trd_owner when setting trd_unitid to negative value
in trad() and check_trade().  This fixes recognition of unused slots
in set (broken in commit e16e38df, v4.2.18) and xdump (never worked).
This commit is contained in:
Markus Armbruster 2008-09-14 12:04:32 -04:00
parent 69b74bb5dd
commit 94a3108b23

View file

@ -133,6 +133,7 @@ trad(void)
}
if (!trade_getitem(&trade, &tg)) {
pr("Can't find trade #%d!\n", trade.trd_unitid);
trade.trd_owner = 0;
trade.trd_unitid = -1;
if (!puttrade(lotno, &trade)) {
logerror("trad: can't write trade");
@ -289,12 +290,14 @@ check_trade(void)
if (!trade_getitem(&trade, &tg))
continue;
if (tg.gen.own == 0) {
trade.trd_owner = 0;
trade.trd_unitid = -1;
puttrade(n, &trade);
continue;
}
if (tg.gen.own != trade.trd_owner) {
logerror("Something weird, tg.gen.own != trade.trd_owner!\n");
trade.trd_owner = 0;
trade.trd_unitid = -1;
puttrade(n, &trade);
continue;
@ -312,6 +315,7 @@ check_trade(void)
continue;
saveid = trade.trd_unitid;
trade.trd_owner = 0;
trade.trd_unitid = -1;
if (!puttrade(n, &trade)) {
logerror("Couldn't save trade after purchase; get help!\n");