int do_getsockname(optype, stab, arglast) int optype; STAB *stab; int *arglast; { register STR **st = stack->ary_array; register int sp = arglast[1]; register STIO *stio; int fd; if (!stab) goto nuts; stio = stab_io(stab); if (!stio || !stio->ifp) goto nuts; st[sp] = str_2mortal(Str_new(22,257)); st[sp]->str_cur = 256; st[sp]->str_pok = 1; fd = fileno(stio->ifp); switch (optype) { case O_GETSOCKNAME: if (getsockname(fd, st[sp]->str_ptr, (int*)&st[sp]->str_cur) < 0) goto nuts2; break; case O_GETPEERNAME: if (getpeername(fd, st[sp]->str_ptr, (int*)&st[sp]->str_cur) < 0) goto nuts2; break; } return sp; nuts: if (dowarn) warn("get{sock,peer}name() on closed fd"); errno = EBADF; nuts2: st[sp] = &str_undef; return sp; }