]> git.pond.sub.org Git - empserver/blobdiff - src/lib/subs/nstr.c
License upgrade to GPL version 3 or later
[empserver] / src / lib / subs / nstr.c
index 8beb07094a612284655d506e467ae6e530346ce4..12c2ed80eac3e311f4fad60baaf95be900680cfe 100644 (file)
@@ -1,11 +1,11 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2008, Dave Pare, Jeff Bailey, Thomas Ruschak,
- *                           Ken Stevens, Steve McClure
+ *  Copyright (C) 1986-2011, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *                Ken Stevens, Steve McClure, Markus Armbruster
  *
- *  This program is free software; you can redistribute it and/or modify
+ *  Empire is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
+ *  the Free Software Foundation, either version 3 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -14,8 +14,7 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  *  ---
  *
@@ -48,7 +47,6 @@ static int nstr_is_name_of_ca(struct valstr *, struct castr *, int);
 static int nstr_ca_comparable(struct castr *, int, int);
 static int nstr_match_val(struct valstr *, struct castr *, int);
 static struct valstr *nstr_resolve_id(struct valstr *, struct castr *, int);
-static struct valstr *nstr_resolve_sel(struct valstr *, struct castr *);
 static struct valstr *nstr_resolve_val(struct valstr *, int, struct castr *);
 static int nstr_optype(enum nsc_type, enum nsc_type);
 
@@ -200,8 +198,10 @@ static int
 strnncmp(char *s1, size_t sz1, char *s2, size_t sz2)
 {
     int res;
-    if (sz1 == sz2) return strncmp(s1, s2, sz2);
-    if (sz1 < sz2) return -strnncmp(s2, sz2, s1, sz1);
+    if (sz1 == sz2)
+       return strncmp(s1, s2, sz2);
+    if (sz1 < sz2)
+       return -strnncmp(s2, sz2, s1, sz1);
     res = strncmp(s1, s2, sz2);
     return res ? res : s1[sz2];
 }
@@ -279,7 +279,8 @@ nstr_parse_val(char *str, struct valstr *val)
        val->val_cat = NSC_VAL;
        val->val_as.str.base = str + 1;
        val->val_as.str.maxsz = tail - (str + 1);
-       if (*tail) ++tail;
+       if (*tail)
+           ++tail;
        /* FIXME else unclosed string */
        return tail;
     }
@@ -354,7 +355,7 @@ static int
 nstr_is_name_of_ca(struct valstr *val, struct castr *ca, int idx)
 {
     if (CANT_HAPPEN(val->val_cat != NSC_ID && idx >= 0))
-       return 0;
+       return 0;
     return idx >= 0 && strlen(ca[idx].ca_name) == val->val_as.str.maxsz;
 }
 
@@ -432,31 +433,14 @@ nstr_resolve_id(struct valstr *val, struct castr *ca, int idx)
        return NULL;
     }
 
-    return nstr_resolve_sel(val, &ca[idx]);
-}
-
-/*
- * Change VAL to resolve identifier to selector CA.
- * Return VAL on success, NULL if the player is denied access to the
- * selector.
- * VAL must be an identifier.
- */
-static struct valstr *
-nstr_resolve_sel(struct valstr *val, struct castr *ca)
-{
-    if (CANT_HAPPEN(val->val_cat != NSC_ID)) {
-       val->val_cat = NSC_NOCAT;
-       return val;
-    }
-
-    if ((ca->ca_flags & NSC_DEITY) && !player->god) {
+    if ((ca[idx].ca_flags & NSC_DEITY) && !player->god) {
        pr("%.*s -- not accessible to mortals\n",
           (int)val->val_as.str.maxsz, val->val_as.str.base);
        val->val_cat = NSC_NOCAT;
        return NULL;
     }
 
-    return nstr_mksymval(val, ca, 0);
+    return nstr_mksymval(val, &ca[idx], 0);
 }
 
 /*
@@ -505,11 +489,11 @@ nstr_optype(enum nsc_type lft, enum nsc_type rgt)
     lft = nstr_promote(lft);
     rgt = nstr_promote(rgt);
     if (lft == rgt)
-       return lft;
+       return lft;
     if (lft == NSC_DOUBLE && rgt == NSC_LONG)
-       return NSC_DOUBLE;
+       return NSC_DOUBLE;
     if (rgt == NSC_DOUBLE && lft == NSC_LONG)
-       return NSC_DOUBLE;
+       return NSC_DOUBLE;
     return NSC_NOTYPE;
 }