int VLDB_ListAttributes(VldbListByAttributes *attrp, afs_int32 *entriesp, nbulkentries *blkentriesp) { bulkentries arrayEntries; int code; if (newvlserver == vltype_old) { tryold: memset(&arrayEntries, 0, sizeof(arrayEntries)); code = ubik_VL_ListAttributes(cstruct, 0, attrp, entriesp, &arrayEntries); if (code) return code; /* Ensure the number of entries claimed matches the no. returned */ if (*entriesp < 0) *entriesp = 0; if (*entriesp > arrayEntries.bulkentries_len) *entriesp = arrayEntries.bulkentries_len; convertBulkToNBulk(&arrayEntries, blkentriesp); xdr_free((xdrproc_t) xdr_bulkentries, &arrayEntries); return code; } code = ubik_VL_ListAttributesN(cstruct, 0, attrp, entriesp, blkentriesp); if (newvlserver == vltype_unknown) { if (code == RXGEN_OPCODE) { newvlserver = vltype_old; /* Doesn't support new interface */ goto tryold; } else if (!code) { newvlserver = vltype_new; } } if (code) return code; /* Ensure the number of entries claimed matches the no. returned */ if (*entriesp < 0) *entriesp = 0; if (*entriesp > blkentriesp->nbulkentries_len) *entriesp = blkentriesp->nbulkentries_len; return code; }
int VLDB_ListAttributes(VldbListByAttributes *attrp, afs_int32 *entriesp, nbulkentries *blkentriesp) { bulkentries arrayEntries; register int code, i; if (newvlserver == 1) { tryold: memset(&arrayEntries, 0, sizeof(arrayEntries)); /*initialize to hint the stub to alloc space */ code = ubik_VL_ListAttributes(cstruct, 0, attrp, entriesp, &arrayEntries); if (!code) { blkentriesp->nbulkentries_val = (nvldbentry *) malloc(*entriesp * sizeof(struct nvldbentry)); for (i = 0; i < *entriesp; i++) { /* process each entry */ ovlentry_to_nvlentry(&arrayEntries.bulkentries_val[i], &blkentriesp->nbulkentries_val[i]); } } if (arrayEntries.bulkentries_val) free(arrayEntries.bulkentries_val); return code; } code = ubik_VL_ListAttributesN(cstruct, 0, attrp, entriesp, blkentriesp); if (!newvlserver) { if (code == RXGEN_OPCODE) { newvlserver = 1; /* Doesn't support new interface */ goto tryold; } else if (!code) { newvlserver = 2; } } return code; }