]> git.pond.sub.org Git - empserver/commitdiff
(trade_check_item_ok): New.
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 25 Mar 2006 15:26:29 +0000 (15:26 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Sat, 25 Mar 2006 15:26:29 +0000 (15:26 +0000)
(trade_check_ok): Use it and simplify.

(set): Use new trade_check_item_ok().  The code replaced by it didn't
work (abusable bug).

include/trade.h
src/lib/commands/set.c
src/lib/subs/trdsub.c

index 81f71e07b66792647b85ffea7f104cb1a7b0ae52..7330bfd40dd1fbd0e4acd0de8df9a96634cd6808 100644 (file)
@@ -65,6 +65,7 @@ union trdgenstr {
 };
 
 extern int trade_check_ok(struct trdstr *, union trdgenstr *);
+extern int trade_check_item_ok(union trdgenstr *);
 extern s_char *trade_nameof(struct trdstr *, union trdgenstr *);
 extern int trade_desc(struct trdstr *, union trdgenstr *);
 extern int trade_getitem(struct trdstr *, union trdgenstr *);
index 7f888e089df19716845d39c64a721b6e1730add4..ddf15506bc8ec61d021c25a2bb72a359515c510c 100644 (file)
@@ -64,7 +64,6 @@ set(void)
     struct nstr_item ni;
     struct nstr_item ni_trade;
     union trdgenstr item;
-    union trdgenstr check;
     struct sctstr sect;
     int freeslot;
     int foundslot;
@@ -98,13 +97,10 @@ set(void)
        trade.trd_type = type;
        sprintf(prompt, "%s #%d; Price? ",
                trade_nameof(&trade, &item), ni.cur);
-       memcpy(&check, &item, sizeof(union trdgenstr));
        if ((p = getstarg(player->argp[3], prompt, buf)) == 0)
            break;
-       if (memcmp(&check, &item, sizeof(union trdgenstr))) {
-           pr("That item has changed!\n");
+       if (!trade_check_item_ok(&item))
            return RET_FAIL;
-       }
        if ((price = atoi(p)) < 0)
            continue;
        foundslot = -1;
index b6a8fe538bba62de56ca1bb25db09a419e558608..f5f3547aed9f0a799d6968d4f62af5b3cb1041fe 100644 (file)
 int
 trade_check_ok(struct trdstr *tp, union trdgenstr *tgp)
 {
-    union trdgenstr check;
-
-    if (!check_trade_ok(tp))
-       return 0;
+    return check_trade_ok(tp) && trade_check_item_ok(tgp);
+}
 
-    trade_getitem(tp, &check);
-    if (tp->trd_type == EF_LAND)
+int
+trade_check_item_ok(union trdgenstr *tgp)
+{
+    if (tgp->gen.ef_type == EF_LAND)
        return check_land_ok(&tgp->lnd);
-    if (tp->trd_type == EF_PLANE)
+    if (tgp->gen.ef_type == EF_PLANE)
        return check_plane_ok(&tgp->pln);
-    if (tp->trd_type == EF_SHIP)
+    if (tgp->gen.ef_type == EF_SHIP)
        return check_ship_ok(&tgp->shp);
-    if (tp->trd_type == EF_NUKE)
+    if (tgp->gen.ef_type == EF_NUKE)
        return check_nuke_ok(&tgp->nuk);
-    CANT_HAPPEN("Bad TRD_TYPE");
-    pr("Trade lot #%d went bad!\n", tp->trd_uid);
+    CANT_HAPPEN("Bad EF_TYPE");
+    pr("Trade lot went bad!\n");
     return 0;
 }