char * ttyname(int f) { char *ans = tsdalloc(_T_TTYNAME, MAX_DEV_PATH, NULL); if (ans == NULL) return (NULL); return (_ttyname_r(f, ans, MAX_DEV_PATH)); }
char * asctime(const struct tm *t) { char *cbuf = tsdalloc(_T_CTIME, CBUFSIZ, NULL); if (cbuf == NULL) return (NULL); return (__posix_asctime_r(t, cbuf)); }
/* * For extended login names, selected by redefine_extname in unistd.h. */ char * getloginx(void) { char *answer = tsdalloc(_T_LOGIN, LOGIN_NAME_MAX, NULL); if (answer == NULL) return (NULL); return (getl_r_common(answer, LOGIN_NAME_MAX, NMAX)); }
char * getlogint(void) { char *answer = tsdalloc(_T_LOGIN, LOGIN_NAME_MAX_TRAD, NULL); if (answer == NULL) return (NULL); return (getl_r_common(answer, LOGIN_NAME_MAX_TRAD, LOGNAME_MAX_TRAD)); }
static nss_XbyY_buf_t * get_spbuf() { nss_XbyY_buf_t **buffer = tsdalloc(_T_SPBUF, sizeof (nss_XbyY_buf_t *), free_spbuf); nss_XbyY_buf_t *b; if (buffer == NULL) return (NULL); b = NSS_XbyY_ALLOC(buffer, sizeof (struct spwd), NSS_BUFLEN_SHADOW); return (b); }
static nss_XbyY_buf_t * get_pwbuf() { nss_XbyY_buf_t **buffer = tsdalloc(_T_PWBUF, sizeof (nss_XbyY_buf_t *), free_pwbuf); nss_XbyY_buf_t *b; if (buffer == NULL) return (NULL); b = NSS_XbyY_ALLOC(buffer, sizeof (struct passwd), NSS_BUFLEN_PASSWD); return (b); }
char * ctime(const time_t *t) { char *cbuf = tsdalloc(_T_CTIME, CBUFSIZ, NULL); struct tm *p; if (cbuf == NULL) return (NULL); p = localtime(t); if (p == NULL) return (NULL); return (__posix_asctime_r(p, cbuf)); }
static char * __getpass(const char *prompt, int size) { struct termio ttyb; unsigned short flags; char *p; int c; FILE *fi; char *pbuf = tsdalloc(_T_GETPASS, MAXPASSWD + 1, NULL); struct sigaction act, osigint, osigtstp; if (pbuf == NULL || (fi = fopen("/dev/tty", "r+F")) == NULL) return (NULL); setbuf(fi, NULL); intrupt = 0; act.sa_flags = 0; act.sa_handler = catch; (void) sigemptyset(&act.sa_mask); (void) sigaction(SIGINT, &act, &osigint); /* trap interrupt */ act.sa_handler = SIG_IGN; (void) sigaction(SIGTSTP, &act, &osigtstp); /* ignore stop */ (void) ioctl(fileno(fi), TCGETA, &ttyb); flags = ttyb.c_lflag; ttyb.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL); (void) ioctl(fileno(fi), TCSETAF, &ttyb); (void) fputs(prompt, fi); p = pbuf; while (!intrupt && (c = GETC(fi)) != '\n' && c != '\r' && c != EOF) { if (p < &pbuf[ size ]) *p++ = (char)c; } *p = '\0'; (void) PUTC('\n', fi); ttyb.c_lflag = flags; (void) ioctl(fileno(fi), TCSETAW, &ttyb); (void) sigaction(SIGINT, &osigint, NULL); (void) sigaction(SIGTSTP, &osigtstp, NULL); (void) fclose(fi); if (intrupt) { /* if interrupted erase the input */ pbuf[0] = '\0'; (void) kill(getpid(), SIGINT); } return (pbuf); }
static char * __getpass(const char *prompt, int size) { struct termio ttyb; unsigned short flags; char *p; int c; FILE *fi; char *pbuf = tsdalloc(_T_GETPASS, MAXPASSWD + 1, NULL); void (*sig)(int); rmutex_t *lk; if (pbuf == NULL || (fi = fopen("/dev/tty", "rF")) == NULL) return (NULL); setbuf(fi, NULL); sig = signal(SIGINT, catch); intrupt = 0; (void) ioctl(FILENO(fi), TCGETA, &ttyb); flags = ttyb.c_lflag; ttyb.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL); (void) ioctl(FILENO(fi), TCSETAF, &ttyb); FLOCKFILE(lk, stderr); (void) fputs(prompt, stderr); p = pbuf; while (!intrupt && (c = GETC(fi)) != '\n' && c != '\r' && c != EOF) { if (p < &pbuf[ size ]) *p++ = (char)c; } *p = '\0'; ttyb.c_lflag = flags; (void) ioctl(FILENO(fi), TCSETAW, &ttyb); (void) PUTC('\n', stderr); FUNLOCKFILE(lk); (void) signal(SIGINT, sig); (void) fclose(fi); if (intrupt) (void) kill(getpid(), SIGINT); return (pbuf); }
locale_t uselocale(locale_t loc) { locale_t lastloc = ___global_locale; locale_t *locptr; locptr = tsdalloc(_T_SETLOCALE, sizeof (locale_t), freelocptr); /* Should never occur */ if (locptr == NULL) { errno = EINVAL; return (NULL); } if (*locptr != NULL) lastloc = *locptr; /* Argument loc is NULL if we are just querying. */ if (loc != NULL) { /* * Set it to LC_GLOBAL_LOCAL to return to using * the global locale (setlocale). */ if (loc == ___global_locale) { *locptr = NULL; } else { /* No validation of the provided locale at present */ *locptr = loc; } } /* * The caller is responsible for freeing, of course it would be * gross error to call freelocale() on a locale object that is still * in use. */ return (lastloc); }