char *GetARName( ar_header *header, file_list *list, unsigned long *loc ) /***********************************************************************/ { char *buf; char *name; unsigned long val; size_t len; name = NULL; if( header->name[0] == '/' ) { val = GetARValue( &header->name[1], AR_NAME_LEN - 1 ); buf = list->strtab + val; len = strlen( buf ); } else if( header->name[0] == '#' && header->name[1] == '1' && header->name[2] == '/') { len = GetARValue( &header->name[3], AR_NAME_LEN - 3 ); buf = CacheRead( list, *loc, len ); *loc += len; } else { len = AR_NAME_LEN; buf = memchr( header->name, '/', len ); if( buf != NULL ) { len = buf - header->name; } buf = header->name; } if( len > 0 ) { name = ChkToString( buf, len ); } return( name ); }
static void SetSymAlias( symbol *sym, char *target, size_t targetlen ) /********************************************************************/ { SET_SYM_TYPE( sym, SYM_ALIAS ); sym->p.alias = ChkToString( target, targetlen ); sym->u.aliaslen = targetlen; sym->info |= SYM_DEFINED; /* an alias can't be undefined */ sym->info &= ~SYM_WAS_LAZY; }