libafscp: code cleanup
[openafs.git] / src / libafscp / afscp_volume.c
index 933705e..6a0978d 100644 (file)
@@ -24,294 +24,308 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
+#include <afsconfig.h>
 #include <afs/param.h>
+
+#include <roken.h>
+
+#include <search.h>
+
 #include <afs/vlserver.h>
 #include <afs/vldbint.h>
 #include <afs/volint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <inttypes.h>
 #include "afscp.h"
 #include "afscp_internal.h"
 
-#include <search.h>
-#include <time.h>
-
-static int icompare(const void *pa, const void *pb) {
-  const struct afs_volume *va=pa,*vb=pb;
+static int
+icompare(const void *pa, const void *pb)
+{
+    const struct afscp_volume *va = pa, *vb = pb;
 
-  if (va->id > vb->id) return 1;
-  if (va->id < vb->id) return -1;
-  return 0;
+    if (va->id > vb->id)
+       return 1;
+    if (va->id < vb->id)
+       return -1;
+    return 0;
 }
 
+static int
+ncompare(const void *pa, const void *pb)
+{
+    const struct afscp_volume *va = pa, *vb = pb;
 
-static int ncompare(const void *pa, const void *pb) {
-  const struct afs_volume *va=pa,*vb=pb;
-
-  if (va->voltype > vb->voltype) return 1;
-  if (vb->voltype < va->voltype) return -1;
-  return strcmp(va->name, vb->name);
+    if (va->voltype > vb->voltype)
+       return 1;
+    if (vb->voltype < va->voltype)
+       return -1;
+    return strcmp(va->name, vb->name);
 }
 
-
-union allvldbentry
-{
-     struct uvldbentry u;
-     struct nvldbentry n;
-     struct vldbentry o;
+union allvldbentry {
+    struct uvldbentry u;
+    struct nvldbentry n;
+    struct vldbentry o;
 };
 
-struct afs_volume *afs_volumebyname(struct afs_cell *cell, const char *vname, afs_int32 intype)
+struct afscp_volume *
+afscp_VolumeByName(struct afscp_cell *cell, const char *vname,
+                  afs_int32 intype)
 {
-     union allvldbentry u;
-     struct afs_volume *ret,key;
-     struct afs_server *server;
-     afs_int32 code,vtype,type,srv;
-     void *s;
-     struct in_addr i;
+    union allvldbentry u;
+    struct afscp_volume *ret, key;
+    struct afscp_server *server;
+    afs_int32 code, vtype, type, srv;
+    void *s;
+    /* struct in_addr i; */
 
-     if (intype == VOLTYPE_RW)
-          vtype=VLSF_RWVOL;
-     else if (intype == VOLTYPE_RO)
-          vtype=VLSF_ROVOL;
-     else if (intype == VOLTYPE_BK)
-          vtype=VLSF_BACKVOL;
-     else {
-          afs_errno=EINVAL;
-          return NULL;
-     }
+    if (intype == RWVOL)
+       vtype = VLSF_RWVOL;
+    else if (intype == ROVOL)
+       vtype = VLSF_ROVOL;
+    else if (intype == BACKVOL)
+       vtype = VLSF_BACKVOL;
+    else {
+       afscp_errno = EINVAL;
+       return NULL;
+    }
 
-     memset(&key,0, sizeof(key));
-     strcpy(key.name,vname);
-     key.voltype=vtype;
-     s=tfind(&key, &cell->volsbyname, ncompare);
-     if (s) {
-       ret=*(struct afs_volume **)s;
-       return ret;
-     }
+    memset(&key, 0, sizeof(key));
+    strlcpy(key.name, vname, sizeof(key.name));
+    key.voltype = vtype;
+    s = tfind(&key, &cell->volsbyname, ncompare);
+    if (s) {
+       ret = *(struct afscp_volume **)s;
+       return ret;
+    }
 
-     type=0;
-     if ((code=ubik_VL_GetEntryByNameU(cell->vlservers, 0, (char *)vname, &u.u))
-         == RXGEN_OPCODE) {
-          type=1;
-          if ((code=ubik_VL_GetEntryByNameN(cell->vlservers, 0, (char *)vname, &u.n))
-              == RXGEN_OPCODE) {
-               type=2;
-               code=ubik_VL_GetEntryByNameO(cell->vlservers, 0, (char *)vname, &u.o);
-          }
-     }
-     if (code) {
-          afs_errno=code;
-          return NULL;
-     }
-     ret=malloc(sizeof(struct afs_volume));
-     if (!ret) {
-          afs_errno=ENOMEM;
-          return NULL;
-     }
-     memset(ret,0,sizeof(struct afs_volume));
-     strcpy(ret->name, u.u.name);
-     ret->nservers=0;
-     ret->cell=cell;
-     switch (type) {
-     case 0:
-       ret->id=u.u.volumeId[intype];
-          for (srv=0;srv < u.u.nServers;srv++) {
-               if ((u.u.serverFlags[srv] & vtype) == 0)
-                    continue;
-               //printf("uvldbentry server %d flags: %x\n",srv,  u.u.serverFlags[srv]);
+    type = 0;
+    code = ubik_VL_GetEntryByNameU(cell->vlservers, 0, (char *)vname, &u.u);
+    if (code == RXGEN_OPCODE) {
+       type = 1;
+       code =
+           ubik_VL_GetEntryByNameN(cell->vlservers, 0, (char *)vname, &u.n);
+       if (code == RXGEN_OPCODE) {
+           type = 2;
+           code = ubik_VL_GetEntryByNameO(cell->vlservers, 0, (char *)vname,
+                                          &u.o);
+       }
+    }
+    if (code != 0) {
+       afscp_errno = code;
+       return NULL;
+    }
+    ret = malloc(sizeof(struct afscp_volume));
+    if (ret == NULL) {
+       afscp_errno = ENOMEM;
+       return NULL;
+    }
+    memset(ret, 0, sizeof(struct afscp_volume));
+    strlcpy(ret->name, u.u.name, sizeof(ret->name));
+    ret->nservers = 0;
+    ret->cell = cell;
+    switch (type) {
+    case 0:
+       ret->id = u.u.volumeId[intype];
+       for (srv = 0; srv < u.u.nServers; srv++) {
+           if ((u.u.serverFlags[srv] & vtype) == 0)
+               continue;
+           afs_dprintf(("uvldbentry server %d flags: %x\n", srv,
+                        u.u.serverFlags[srv]));
 
-               if ((u.u.serverFlags[srv] & VLSERVER_FLAG_UUID) == 0)
-                    server=afs_serverbyaddr(cell, u.u.serverNumber[srv].time_low);
-               else
-                    server=afs_serverbyid(cell, &u.u.serverNumber[srv]);
-               if (!server)
-                    continue;
-               ret->servers[ret->nservers++]=server->index;
-          }
-          break;
-     case 1:
-       ret->id=u.n.volumeId[intype];
-          for (srv=0;srv < u.n.nServers;srv++) {
-               if ((u.n.serverFlags[srv] & vtype) == 0)
-                    continue;
-               server=afs_serverbyaddr(cell, u.n.serverNumber[srv]);
-               if (!server)
-                    continue;
-               ret->servers[ret->nservers++]=server->index;
-          }
-          break;
-     case 2:
-       ret->id=u.o.volumeId[intype];
-          for (srv=0;srv < u.o.nServers;srv++) {
-               if ((u.o.serverFlags[srv] & vtype) == 0)
-                    continue;
-               server=afs_serverbyaddr(cell, u.o.serverNumber[srv]);
-               if (!server)
-                    continue;
-               ret->servers[ret->nservers++]=server->index;
-          }
-          break;
-     }
-     if (!ret->nservers || !ret->id) {
-          free(ret);
-          return NULL;
-     }
+           if ((u.u.serverFlags[srv] & VLSERVER_FLAG_UUID) == 0)
+               server =
+                   afscp_ServerByAddr(cell, u.u.serverNumber[srv].time_low);
+           else
+               server = afscp_ServerById(cell, &u.u.serverNumber[srv]);
+           if (!server)
+               continue;
+           ret->servers[ret->nservers++] = server->index;
+       }
+       break;
+    case 1:
+       ret->id = u.n.volumeId[intype];
+       for (srv = 0; srv < u.n.nServers; srv++) {
+           if ((u.n.serverFlags[srv] & vtype) == 0)
+               continue;
+           server = afscp_ServerByAddr(cell, u.n.serverNumber[srv]);
+           if (!server)
+               continue;
+           ret->servers[ret->nservers++] = server->index;
+       }
+       break;
+    case 2:
+       ret->id = u.o.volumeId[intype];
+       for (srv = 0; srv < u.o.nServers; srv++) {
+           if ((u.o.serverFlags[srv] & vtype) == 0)
+               continue;
+           server = afscp_ServerByAddr(cell, u.o.serverNumber[srv]);
+           if (!server)
+               continue;
+           ret->servers[ret->nservers++] = server->index;
+       }
+       break;
+    }
+    if (!ret->nservers || !ret->id) {
+       free(ret);
+       return NULL;
+    }
 
-     ret->voltype=intype;
-     server=afs_serverbyindex(ret->servers[0]);
-     if (server)
-       i.s_addr=server->addrs[0];
-     else
-       i.s_addr=0;
-     afscp_dprintf(("New volume BYNAME %s (%lu) on %s (%d)\n", ret->name, ret->id, inet_ntoa(i),ret->servers[0]));
-     s=tsearch(&key, &cell->volsbyname, ncompare);
-     if (s)
-       *(struct afs_volume **)s=ret;
-     key.id=ret->id;
-     s=tsearch(&key, &cell->volsbyid, icompare);
-     if (s)
-       *(struct afs_volume **)s=ret;
-     return ret;
+    ret->voltype = intype;
+    server = afscp_ServerByIndex(ret->servers[0]);
+    /* if (server != NULL)
+     * i.s_addr = server->addrs[0];
+     * else
+     * i.s_addr = 0; */
+    /* i.s_addr is set but not used later */
+    afs_dprintf(("New volume BYNAME %s (%lu) on %s (%d)\n", ret->name,
+                afs_printable_uint32_lu(ret->id),
+                inet_ntoa(i), ret->servers[0]));
+    s = tsearch(&key, &cell->volsbyname, ncompare);
+    if (s)
+       *(struct afscp_volume **)s = ret;
+    key.id = ret->id;
+    s = tsearch(&key, &cell->volsbyid, icompare);
+    if (s)
+       *(struct afscp_volume **)s = ret;
+    return ret;
 }
 
-struct afs_volume *afs_volumebyid(struct afs_cell *cell, afs_uint32 id)
+struct afscp_volume *
+afscp_VolumeById(struct afscp_cell *cell, afs_uint32 id)
 {
-     union allvldbentry u;
-     struct afs_volume *ret,key;
-     struct afs_server *server;
-     afs_int32 code,vtype,type,srv;
-     int voltype;
-     char idbuffer[16];
-     void *s;
-     struct in_addr i;
-
-     memset(&key,0, sizeof(key));
-     key.id=id;
-     s=tfind(&key, &cell->volsbyid, icompare);
-     if (s) {
-       ret=*(struct afs_volume **)s;
-       return ret;
-     }
+    union allvldbentry u;
+    struct afscp_volume *ret, key;
+    struct afscp_server *server;
+    afs_int32 code, vtype, type, srv;
+    int voltype = -1;
+    char idbuffer[16];
+    void *s;
+    /* struct in_addr i; */
 
-     sprintf(idbuffer,"%" PRIu32, id);
-     type=0;
-     if ((code=ubik_VL_GetEntryByNameU(cell->vlservers, 0, idbuffer, &u.u))
-         == RXGEN_OPCODE) {
-          type=1;
-          if ((code=ubik_VL_GetEntryByIDN(cell->vlservers, 0, id, -1, &u.n))
-              == RXGEN_OPCODE) {
-               type=2;
-               code=ubik_VL_GetEntryByID(cell->vlservers, 0, id, -1,  &u.o);
-          }
-     }
-     if (code) {
-          afs_errno=code;
-          return NULL;
-     }
-     ret=malloc(sizeof(struct afs_volume));
-     if (!ret) {
-          afs_errno=ENOMEM;
-          return NULL;
-     }
+    memset(&key, 0, sizeof(key));
+    key.id = id;
+    s = tfind(&key, &cell->volsbyid, icompare);
+    if (s) {
+       ret = *(struct afscp_volume **)s;
+       return ret;
+    }
 
-     memset(ret,0,sizeof(struct afs_volume));
-     strcpy(ret->name, u.u.name);
-     ret->nservers=0;
-     ret->cell=cell;
+    snprintf(idbuffer, sizeof(idbuffer), "%lu", afs_printable_uint32_lu(id));
+    type = 0;
+    code = ubik_VL_GetEntryByNameU(cell->vlservers, 0, idbuffer, &u.u);
+    if (code == RXGEN_OPCODE) {
+       type = 1;
+       code = ubik_VL_GetEntryByIDN(cell->vlservers, 0, id, -1, &u.n);
+       if (code == RXGEN_OPCODE) {
+           type = 2;
+           code = ubik_VL_GetEntryByID(cell->vlservers, 0, id, -1, &u.o);
+       }
+    }
+    if (code != 0) {
+       afscp_errno = code;
+       return NULL;
+    }
+    ret = malloc(sizeof(struct afscp_volume));
+    if (ret == NULL) {
+       afscp_errno = ENOMEM;
+       return NULL;
+    }
+    memset(ret, 0, sizeof(struct afscp_volume));
+    strlcpy(ret->name, u.u.name, sizeof(ret->name));
+    ret->nservers = 0;
+    ret->cell = cell;
 
-     switch (type) {
-     case 0:
-          if (id == u.u.volumeId[RWVOL]) {
-               vtype=VLSF_RWVOL;
-               voltype=VOLTYPE_RW;
-          } else if (id == u.u.volumeId[ROVOL]) {
-               vtype=VLSF_ROVOL;
-               voltype=VOLTYPE_RO;
-          } else if (id == u.u.volumeId[BACKVOL]) {
-               vtype=VLSF_BACKVOL;
-               voltype=VOLTYPE_BK;
-          } else {
-               vtype=0;
-               voltype=-1;
-          }
-          for (srv=0;srv < u.u.nServers;srv++) {
-               if ((u.u.serverFlags[srv] & vtype) == 0)
-                    continue;
-               if ((u.u.serverFlags[srv] & VLSERVER_FLAG_UUID) == 0)
-                    server=afs_serverbyaddr(cell, u.u.serverNumber[srv].time_low);
-               else
-                    server=afs_serverbyid(cell, &u.u.serverNumber[srv]);
-               if (!server)
-                    continue;
-               ret->servers[ret->nservers++]=server->index;
-          }
-          break;
-     case 1:
-          if (id == u.n.volumeId[RWVOL]) {
-               vtype=VLSF_RWVOL;
-               voltype=VOLTYPE_RW;
-          } else if (id == u.n.volumeId[ROVOL]) {
-               vtype=VLSF_ROVOL;
-               voltype=VOLTYPE_RO;
-          } else if (id == u.n.volumeId[BACKVOL]) {
-               vtype=VLSF_BACKVOL;
-               voltype=VOLTYPE_BK;
-          } else {
-               vtype=0;
-               voltype=-1;
-          }
-          for (srv=0;srv < u.n.nServers;srv++) {
-               if ((u.n.serverFlags[srv] & vtype) == 0)
-                    continue;
-               server=afs_serverbyaddr(cell, u.n.serverNumber[srv]);
-               if (!server)
-                    continue;
-               ret->servers[ret->nservers++]=server->index;
-          }
-          break;
-     case 2:
-          if (id == u.o.volumeId[RWVOL]) {
-               vtype=VLSF_RWVOL;
-               voltype=VOLTYPE_RW;
-          } else if (id == u.o.volumeId[ROVOL]) {
-               vtype=VLSF_ROVOL;
-               voltype=VOLTYPE_RO;
-          } else if (id == u.o.volumeId[BACKVOL]) {
-               vtype=VLSF_BACKVOL;
-               voltype=VOLTYPE_BK;
-          } else {
-               vtype=0;
-               voltype=-1;
-          }
-          for (srv=0;srv < u.o.nServers;srv++) {
-               if ((u.o.serverFlags[srv] & vtype) == 0)
-                    continue;
-               server=afs_serverbyaddr(cell, u.o.serverNumber[srv]);
-               if (!server)
-                    continue;
-               ret->servers[ret->nservers++]=server->index;
-          }
-          break;
-     }
-     ret->voltype=voltype;
-     server=afs_serverbyindex(ret->servers[0]);
-     if (server)
-       i.s_addr=server->addrs[0];
-     else
-       i.s_addr=0;
-     afscp_dprintf(("New volume BYID %s (%lu) on %s (%d)\n", ret->name, ret->id, inet_ntoa(i), ret->servers[0]));
-     s=tsearch(&key, &cell->volsbyid, icompare);
-     if (s)
-       *(struct afs_volume **)s=ret;
-     strcpy(key.name, ret->name);
-     s=tsearch(&key, &cell->volsbyname, ncompare);
-     if (s)
-       *(struct afs_volume **)s=ret;
-     return ret;
+    switch (type) {
+    case 0:
+       if (id == u.u.volumeId[RWVOL]) {
+           vtype = VLSF_RWVOL;
+           voltype = RWVOL;
+       } else if (id == u.u.volumeId[ROVOL]) {
+           vtype = VLSF_ROVOL;
+           voltype = ROVOL;
+       } else if (id == u.u.volumeId[BACKVOL]) {
+           vtype = VLSF_BACKVOL;
+           voltype = BACKVOL;
+       } else {
+           vtype = 0;
+           voltype = -1;
+       }
+       for (srv = 0; srv < u.u.nServers; srv++) {
+           if ((u.u.serverFlags[srv] & vtype) == 0)
+               continue;
+           if ((u.u.serverFlags[srv] & VLSERVER_FLAG_UUID) == 0)
+               server =
+                   afscp_ServerByAddr(cell, u.u.serverNumber[srv].time_low);
+           else
+               server = afscp_ServerById(cell, &u.u.serverNumber[srv]);
+           if (!server)
+               continue;
+           ret->servers[ret->nservers++] = server->index;
+       }
+       break;
+    case 1:
+       if (id == u.n.volumeId[RWVOL]) {
+           vtype = VLSF_RWVOL;
+           voltype = RWVOL;
+       } else if (id == u.n.volumeId[ROVOL]) {
+           vtype = VLSF_ROVOL;
+           voltype = ROVOL;
+       } else if (id == u.n.volumeId[BACKVOL]) {
+           vtype = VLSF_BACKVOL;
+           voltype = BACKVOL;
+       } else {
+           vtype = 0;
+           voltype = -1;
+       }
+       for (srv = 0; srv < u.n.nServers; srv++) {
+           if ((u.n.serverFlags[srv] & vtype) == 0)
+               continue;
+           server = afscp_ServerByAddr(cell, u.n.serverNumber[srv]);
+           if (server == NULL)
+               continue;
+           ret->servers[ret->nservers++] = server->index;
+       }
+       break;
+    case 2:
+       if (id == u.o.volumeId[RWVOL]) {
+           vtype = VLSF_RWVOL;
+           voltype = RWVOL;
+       } else if (id == u.o.volumeId[ROVOL]) {
+           vtype = VLSF_ROVOL;
+           voltype = ROVOL;
+       } else if (id == u.o.volumeId[BACKVOL]) {
+           vtype = VLSF_BACKVOL;
+           voltype = BACKVOL;
+       } else {
+           vtype = 0;
+           voltype = -1;
+       }
+       for (srv = 0; srv < u.o.nServers; srv++) {
+           if ((u.o.serverFlags[srv] & vtype) == 0)
+               continue;
+           server = afscp_ServerByAddr(cell, u.o.serverNumber[srv]);
+           if (server == NULL)
+               continue;
+           ret->servers[ret->nservers++] = server->index;
+       }
+       break;
+    }
+    ret->voltype = voltype;
+    server = afscp_ServerByIndex(ret->servers[0]);
+    /* if (server)
+     * i.s_addr = server->addrs[0];
+     * else
+     * i.s_addr = 0; */
+    /* i.s_addr is set but not referenced later */
+    afs_dprintf(("New volume BYID %s (%lu) on %s (%d)\n", ret->name,
+                afs_printable_uint32_lu(ret->id), inet_ntoa(i),
+                ret->servers[0]));
+    s = tsearch(&key, &cell->volsbyid, icompare);
+    if (s)
+       *(struct afscp_volume **)s = ret;
+    strlcpy(key.name, ret->name, sizeof(key.name));
+    s = tsearch(&key, &cell->volsbyname, ncompare);
+    if (s)
+       *(struct afscp_volume **)s = ret;
+    return ret;
 }
-