-void *
-emallocz(unsigned int size) {
- void *res = calloc(1, size);
-
- if(!res)
- eprint("fatal: could not malloc() %u bytes\n", size);
- return res;
-}
-
-void
-eprint(const char *errstr, ...) {
- va_list ap;
-
- va_start(ap, errstr);
- vfprintf(stderr, errstr, ap);
- va_end(ap);
- exit(EXIT_FAILURE);
-}
-
-void
-eprintn(const char *errstr, ...) {
- va_list ap;
-
- va_start(ap, errstr);
- vfprintf(stderr, errstr, ap);
- va_end(ap);
- fprintf(stderr, ": %s\n", strerror(errno));
- exit(EXIT_FAILURE);
-}
-
-void
-getpty(void) {
- char *ptsdev;
-
-#if defined(_GNU_SOURCE)
- ptm = getpt();
-#elif _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600
- ptm = posix_openpt(O_RDWR);
-#elif defined(__sgi)
- ttydev = _getpty(&ptm, O_RDWR, 0622, 0);
-#elif defined(_AIX)
- ptm = open("/dev/ptc", O_RDWR);
-#else
- ptm = open("/dev/ptmx", O_RDWR);
-#if defined(__hpux)
- if(ptm == -1)
- ptm = open("/dev/ptym/clone", O_RDWR);
-#endif
- if(ptm == -1) {
- if(openpty(&ptm, &pts, NULL, NULL, NULL) == -1)
- eprintn("error, cannot open pty");
- return;
- }
-#endif
- if(ptm != -1) {
-#if defined(_XOPEN_SOURCE) || !defined(__sgi) || !defined(_AIX)
- if(grantpt(ptm) == -1)
- eprintn("error, cannot grant access to pty");
- if(unlockpt(ptm) == -1)
- eprintn("error, cannot unlock pty");
- ptsdev = ptsname(ptm);
-#elif defined(_AIX)
- ptsdev = ttyname(ptm);
-#endif
- if(!ptsdev)
- eprintn("error, slave pty name undefined");
- pts = open(ptsdev, O_RDWR);
- if(pts == -1)
- eprintn("error, cannot open slave pty");
- puts(ptsdev);
-#if defined(__hpux) || defined(sun) || defined(__sun)
- ioctl(pts, I_PUSH, "ptem");
- ioctl(pts, I_PUSH, "ldterm");
-#endif