]> git.pond.sub.org Git - empserver/commitdiff
Fix satellite to fail on bad conditional
authorMarkus Armbruster <armbru@pond.sub.org>
Fri, 8 Apr 2011 19:06:56 +0000 (21:06 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Thu, 14 Apr 2011 18:21:21 +0000 (20:21 +0200)
snxtsct() and snxtitem() fail when the condition argument is bad.
satmap() didn't check for failure.  Due to the way snxtsct() and
snxtitem() work, bad condition arguments were reported and otherwise
ignored.

include/prototypes.h
src/lib/commands/sate.c
src/lib/subs/satmap.c

index eb9af47d433b3b57b07e018fe4b54dc007e6eea3..3619b5c478065f5c3cd472e94b492075e32c829a 100644 (file)
@@ -585,7 +585,7 @@ extern int sarg_list(char *, int *, int);
 /* satmap.c */
 extern void satdisp_sect(struct sctstr *, int);
 extern void satdisp_units(coord, coord);
-extern void satmap(int, int, int, int, int, int);
+extern int satmap(int, int, int, int, int, int);
 extern void sathead(void);
 /* sect.c */
 extern void sct_postread(int, void *);
index ae18e05c79c776b8faaada2177594a3320ca9eb1..a1273f7e66168e3f4e9f5f2b6be58931d6a37eb7 100644 (file)
@@ -86,8 +86,6 @@ sate(void)
        pr("Satellite Map Report:\n");
     pr("%s at ", prplane(&plane));
     tech = techfact(plane.pln_tech, 20.0);
-    satmap(plane.pln_x, plane.pln_y, plane.pln_effic,
-          (int)tech, plchr[(int)plane.pln_type].pl_flags, type);
-
-    return RET_OK;
+    return satmap(plane.pln_x, plane.pln_y, plane.pln_effic,
+                 (int)tech, plchr[(int)plane.pln_type].pl_flags, type);
 }
index 0de3c21ef533157d06a4f13feed4380f872b5ae2..06f016af2f5367674a00ce63a5b5601df31caf58 100644 (file)
@@ -28,6 +28,7 @@
  *
  *  Known contributors to this file:
  *     Steve McClure, 2000
+ *     Markus Armbruster, 2004-2011
  */
 
 #include <config.h>
@@ -50,7 +51,7 @@
 static char **rad;
 static char *radbuf;
 
-void
+int
 satmap(int x, int y, int eff, int range, int flags, int type)
 {
     struct sctstr sect;
@@ -68,7 +69,7 @@ satmap(int x, int y, int eff, int range, int flags, int type)
     char selection[1024];
 
     if (!eff)
-       return;
+       return RET_OK;
 
     if (!radbuf)
        radbuf = malloc(WORLD_Y * MAPWIDTH(1));
@@ -82,7 +83,7 @@ satmap(int x, int y, int eff, int range, int flags, int type)
 
     if (!radbuf || !rad) {
        pr("Memory error in satmap, tell the deity.\n");
-       return;
+       return RET_FAIL;
     }
 
     range = range * (eff / 100.0);
@@ -100,9 +101,10 @@ satmap(int x, int y, int eff, int range, int flags, int type)
     sprintf(selection, "@%s:%d", xyas(x, y, player->cnum), range);
 
     if (type == EF_BAD || type == EF_SECTOR) {
-       if (type == EF_SECTOR)  /* Use ?conditionals */
-           snxtsct(&ns, selection);
-       else
+       if (type == EF_SECTOR) { /* Use ?conditionals */
+           if (!snxtsct(&ns, selection))
+               return RET_SYN;
+       } else
            snxtsct_dist(&ns, x, y, range);
 
        blankfill(radbuf, &ns.range, 1);
@@ -143,9 +145,10 @@ satmap(int x, int y, int eff, int range, int flags, int type)
 
     if ((type == EF_BAD || type == EF_SHIP) &&
        (flags & P_S || flags & P_I)) {
-       if (type == EF_SHIP)
-           snxtitem(&ni, EF_SHIP, selection, NULL);
-       else
+       if (type == EF_SHIP) {
+           if (!snxtitem(&ni, EF_SHIP, selection, NULL))
+               return RET_SYN;
+       } else
            snxtitem_dist(&ni, EF_SHIP, x, y, range);
 
        crackle = count = 0;
@@ -188,9 +191,10 @@ satmap(int x, int y, int eff, int range, int flags, int type)
 
     if ((type == EF_BAD || type == EF_LAND) &&
        (flags & P_S || flags & P_I)) {
-       if (type == EF_LAND)
-           snxtitem(&ni, EF_LAND, selection, NULL);
-       else
+       if (type == EF_LAND) {
+           if (!snxtitem(&ni, EF_LAND, selection, NULL))
+               return RET_SYN;
+       } else
            snxtitem_dist(&ni, EF_LAND, x, y, range);
 
        crackle = count = 0;
@@ -247,6 +251,7 @@ satmap(int x, int y, int eff, int range, int flags, int type)
            pr("%s\n", rad[row]);
        pr("\n(c) 1989 Imaginative Images Inc.\n");
     }
+    return RET_OK;
 }
 
 void