While debugging vos I found this huge lump of dead code. Please
test patch I think functionality is the same before/after.

Harald.
Index: src/volser/vsutils.c
===================================================================
RCS file: /cvs/openafs/src/volser/vsutils.c,v
retrieving revision 1.17
diff -u -r1.17 vsutils.c
--- src/volser/vsutils.c        10 Oct 2004 01:39:18 -0000      1.17
+++ src/volser/vsutils.c        18 Oct 2004 00:05:13 -0000
@@ -490,67 +490,34 @@
      afs_int32 *errp;
      char *astring;
 {
-    afs_uint32 tc, value;
-
-    char *str, *ptr, volname[VOLSER_OLDMAXVOLNAME + 1];
-    int tryname, curval;
+    afs_uint32 value;
+    char volname[VOLSER_OLDMAXVOLNAME + 1];
     struct nvldbentry entry;
     afs_int32 vcode = 0;
     int total;
 
     *errp = 0;
-    total = strlen(astring);
-    str = astring;
-    ptr = astring;
-    tryname = 0;
-    while ((curval = *str++)) {
-       if (curval < '0' || curval > '9')
-           tryname = 1;
-    }
 
-    if (tryname) {
-       vsu_ExtractName(volname, astring);
-       vcode = VLDB_GetEntryByName(volname, &entry);
-       if (!vcode) {
-           if (!strcmp(&astring[total - 9], ".readonly"))
-               return entry.volumeId[ROVOL];
-           else if ((!strcmp(&astring[total - 7], ".backup")))
-               return entry.volumeId[BACKVOL];
-           else
-               return (entry.volumeId[RWVOL]);
-       } else {
-           *errp = vcode;
-           return 0;           /* can't find volume */
-       }
+    if (isdigit(astring[0])) {
+       char *end;
+       afs_uint32 result;
+       result = strtoul(astring, &end, 10);
+       if (result != ULONG_MAX && *end == '\0')
+           return result;
     }
 
-    value = 0;
-    while ((tc = *astring++)) {
-       if (tc & 0x80) {
-           if (!tryname)
-               fprintf(STDERR, "goofed in volid \n");
-           else {
-               fprintf(STDERR, "Could not get entry from vldb for %s\n",
-                       ptr);
-               PrintError("", vcode);
-           }
-           *errp = EINVAL;
-           return 0;
-       }
-       if (tc < '0' || tc > '9') {
-           if (!tryname)
-               fprintf(STDERR,
-                       "internal error: out of range char in vol ID\n");
-           else {
-               fprintf(STDERR, "Could not get entry from vldb for %s\n",
-                       ptr);
-               PrintError("", vcode);
-           }
-           *errp = ERANGE;
-           return 0;
-       }
-       value *= 10;
-       value += (tc - '0');
+    /* It was not a volume number but something else */
+    total = strlen(astring);
+    vsu_ExtractName(volname, astring);
+    vcode = VLDB_GetEntryByName(volname, &entry);
+    if (!vcode) {
+      if (!strcmp(&astring[total - 9], ".readonly"))
+       return entry.volumeId[ROVOL];
+      else if ((!strcmp(&astring[total - 7], ".backup")))
+       return entry.volumeId[BACKVOL];
+      else
+       return (entry.volumeId[RWVOL]);
     }
-    return value;
+    *errp = vcode;
+    return 0;          /* can't find volume */
 }

Reply via email to