--- src/afs/afs_callback.c 2001/07/12 19:58:15 1.4 +++ src/afs/afs_callback.c 2001/08/26 19:32:16 @@ -1126,22 +1126,13 @@ afs_int32 i, j; struct cell *tcell; struct afs_q *cq, *tq; - char *t_name; + char *t_name, *p_name = NULL; #ifdef RX_ENABLE_LOCKS AFS_GLOCK(); #endif /* RX_ENABLE_LOCKS */ AFS_STATCNT(SRXAFSCB_GetCellServDB); - t_name = (char *)rxi_Alloc(AFSNAMEMAX); - if (t_name == NULL) { -#ifdef RX_ENABLE_LOCKS - AFS_GUNLOCK(); -#endif /* RX_ENABLE_LOCKS */ - return ENOMEM; - } - - t_name[0] = '\0'; bzero(a_hosts, AFSMAXCELLHOSTS * sizeof(afs_int32)); /* search the list for the cell with this index */ @@ -1150,12 +1141,29 @@ tq = QNext(cq); if (i == a_index) { tcell = QTOC(cq); - strcpy(t_name, tcell->cellName); + p_name = tcell->cellName; for (j = 0 ; j < AFSMAXCELLHOSTS && tcell->cellHosts[j] ; j++) { a_hosts[j] = ntohl(tcell->cellHosts[j]->addr->sa_ip); } } } + + if (p_name) + i = strlen(p_name); + else + i = 0; + t_name = (char *)rxi_Alloc(i+1); + if (t_name == NULL) { +#ifdef RX_ENABLE_LOCKS + AFS_GUNLOCK(); +#endif /* RX_ENABLE_LOCKS */ + return ENOMEM; + } + + t_name[i] = '\0'; + if (p_name) + bcopy(p_name, t_name, i); + ReleaseReadLock(&afs_xcell); #ifdef RX_ENABLE_LOCKS @@ -1191,25 +1199,16 @@ struct rx_call *a_call, char **a_name) { + int plen; struct cell *tcell; struct afs_q *cq, *tq; - char *t_name; + char *t_name, *p_name = NULL; #ifdef RX_ENABLE_LOCKS AFS_GLOCK(); #endif /* RX_ENABLE_LOCKS */ AFS_STATCNT(SRXAFSCB_GetLocalCell); - t_name = (char *)rxi_Alloc(AFSNAMEMAX); - if (t_name == NULL) { -#ifdef RX_ENABLE_LOCKS - AFS_GUNLOCK(); -#endif /* RX_ENABLE_LOCKS */ - return ENOMEM; - } - - t_name[0] = '\0'; - /* Search the list for the primary cell. Cell number 1 is only * the primary cell is when no other cell is explicitly marked as * the primary cell. */ @@ -1218,13 +1217,30 @@ tq = QNext(cq); tcell = QTOC(cq); if (tcell->states & CPrimary) { - strcpy(t_name, tcell->cellName); + p_name = tcell->cellName; break; } if (tcell->cell == 1) { - strcpy(t_name, tcell->cellName); + p_name = tcell->cellName; } } + + if (p_name) + plen = strlen(p_name); + else + plen = 0; + t_name = (char *)rxi_Alloc(plen+1); + if (t_name == NULL) { +#ifdef RX_ENABLE_LOCKS + AFS_GUNLOCK(); +#endif /* RX_ENABLE_LOCKS */ + return ENOMEM; + } + + t_name[plen] = '\0'; + if (p_name) + bcopy(p_name, t_name, plen); + ReleaseReadLock(&afs_xcell); #ifdef RX_ENABLE_LOCKS