예제 #1
0
파일: ttyname.c 프로젝트: andreiw/polaris
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));
}
예제 #2
0
파일: ctime.c 프로젝트: andreiw/polaris
char *
asctime(const struct tm *t)
{
	char *cbuf = tsdalloc(_T_CTIME, CBUFSIZ, NULL);

	if (cbuf == NULL)
		return (NULL);
	return (__posix_asctime_r(t, cbuf));
}
예제 #3
0
/*
 * 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));
}
예제 #4
0
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));
}
예제 #5
0
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);
}
예제 #6
0
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);
}
예제 #7
0
파일: ctime.c 프로젝트: andreiw/polaris
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));
}
예제 #8
0
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);
}
예제 #9
0
파일: getpass.c 프로젝트: andreiw/polaris
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);
}
예제 #10
0
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);
}