From 957f774a90b759abb31557f9b34ee77a8cf21055 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Thu, 16 Apr 2009 13:06:32 +0200 Subject: [PATCH] Fix return value of s_commod() when it can't draw enough s_commod() could incorrectly claim success when the sink ended up with at least as many supplies than were missing initially. This caused a number of problems: * shp_torp() let a ship with two shells fire a torpedo, resulting in -1 shells, which then made item_prewrite() oops. Affected missions and return fire, but not the torpedo command. * shp_missile_defense() let a ship with one shell use missile defense, resulting in -1 shells, and the same item_prewrite() oops. * Land units were considered in supply even when they had not quite enough supplies. Such land units could defend without penalty, attack and react. Commands load and lload weren't affected, because they use lnd_in_supply(), which doesn't use s_commod(). Broken in 98f24d5c, v4.3.20. (cherry picked from commit 1329c0e5441c592fa8e963ba1f70b655a1db2841) --- src/lib/subs/supply.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/subs/supply.c b/src/lib/subs/supply.c index 2650d33f8..853e77fb1 100644 --- a/src/lib/subs/supply.c +++ b/src/lib/subs/supply.c @@ -402,7 +402,7 @@ s_commod(struct empobj *sink, short *vec, if (actually_doit) put_empobj(sink->ef_type, sink->uid, sink); - return wanted <= vec[type]; + return 0; } /* -- 2.43.0