]> git.pond.sub.org Git - empserver/commitdiff
(comtch, stmtch): Make more similar, document. No functional changes.
authorMarkus Armbruster <armbru@pond.sub.org>
Fri, 10 Sep 2004 19:36:02 +0000 (19:36 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Fri, 10 Sep 2004 19:36:02 +0000 (19:36 +0000)
src/lib/common/stmtch.c
src/lib/subs/mtch.c

index 95c7c67556aaf5574e111e0719eaafe3f8c47d09..25b2ece78848192402b4f9fa8081dcf3cb815879 100644 (file)
@@ -56,7 +56,7 @@ stmtch(char *needle, void *haystack, ptrdiff_t offs, size_t elt_size)
        case ME_MISMATCH:
            break;
        case ME_PARTIAL:
-           if (res != M_NOTFOUND)
+           if (res >= 0)
                return M_NOTUNIQUE;
            res = i;
            break;
index 31ceda051595d346b0663cf993207a65c21dbd56..72bc761e534f1d6b5a83b87b0a5c78aeb0437230 100644 (file)
@@ -58,8 +58,10 @@ intmatch(register int value, register int *ptr, int size)
 }
 
 /*
- * find a matching command from coms[].  Return status is:
- *  >= 0: match found, value is array entry in coms[]
+ * Search for COMMAND in COMS[], return its index.
+ * Return M_NOTFOUND if there are no matches, M_NOTUNIQUE if there are
+ * several, M_IGNORE if the command should be ignored.
+ * Ignore commands that require more permissions than COMSTAT.
  */
 int
 comtch(register s_char *command, struct cmndstr *coms, int comstat,
@@ -67,7 +69,6 @@ comtch(register s_char *command, struct cmndstr *coms, int comstat,
 {
     register struct cmndstr *com;
     register int status;
-    register int i;
 
     if (command == 0 || *command == 0)
        return M_IGNORE;
@@ -75,14 +76,16 @@ comtch(register s_char *command, struct cmndstr *coms, int comstat,
     for (com = coms; com->c_form != 0; com++) {
        if ((com->c_permit & comstat) != com->c_permit && !god)
            continue;
-       if ((i = mineq(command, com->c_form)) == ME_MISMATCH)
-           continue;
-       if (i == ME_EXACT)
+       switch (mineq(command, com->c_form)) {
+       case ME_MISMATCH:
+           break;
+       case ME_PARTIAL:
+           if (status >= 0)
+               return M_NOTUNIQUE;
+           status = com - coms;
+       case ME_EXACT:
            return com - coms;
-       /* partial */
-       if (status != M_NOTFOUND)
-           return M_NOTUNIQUE;
-       status = com - coms;
+       }
     }
 
     return status;