- tab[tnum].ran_un.ran_strx = tssiz;
- tab[tnum].ran_off = oldoff;
- for (cp = s->n_un.n_name; tstrtab[tssiz++] = *cp++;)
- if (tssiz > STRTABSZ) {
- fprintf(stderr, "ranlib: string table overflow\n");
- exit(1);
+ tabsiz = ptabseg->nelem;
+ tab = ptabseg->tab;
+
+ if (pstrseg->nelem >= STRTABSZ) {
+ /* allocate a new string table segment */
+ pstrseg = pstrseg->pnext =
+ (struct strsegment *) segalloc(sizeof(struct strsegment));
+ pstrseg->pnext = NULL;
+ pstrseg->nelem = 0;
+ }
+ strsiz = pstrseg->nelem;
+ strtab = pstrseg->stab;
+
+ tab[tabsiz].ran_un.ran_strx = tssiz;
+ tab[tabsiz].ran_off = oldoff;
+redo:
+ for (cp = s->n_un.n_name; strtab[strsiz++] = *cp++;)
+ if (strsiz >= STRTABSZ) {
+ /* allocate a new string table segment */
+ pstrseg = pstrseg->pnext =
+ (struct strsegment *) segalloc(sizeof(struct strsegment));
+ pstrseg->pnext = NULL;
+ strsiz = pstrseg->nelem = 0;
+ strtab = pstrseg->stab;
+ goto redo;