don't write openpty results until success is determined
authorRich Felker <dalias@aerifal.cx>
Sun, 21 Dec 2014 04:22:57 +0000 (23:22 -0500)
committerRich Felker <dalias@aerifal.cx>
Sun, 21 Dec 2014 04:22:57 +0000 (23:22 -0500)
not only is this semantically more correct; it also reduces code size
slightly by eliminating the need for the compiler to assume the
possibility of aliasing.

src/misc/openpty.c

index 1020247..b6962e1 100644 (file)
@@ -6,28 +6,30 @@
 
 /* Nonstandard, but vastly superior to the standard functions */
 
-int openpty(int *m, int *s, char *name, const struct termios *tio, const struct winsize *ws)
+int openpty(int *pm, int *ps, char *name, const struct termios *tio, const struct winsize *ws)
 {
-       int n=0;
+       int m, s, n=0;
        char buf[20];
 
-       *m = open("/dev/ptmx", O_RDWR|O_NOCTTY);
-       if (*m < 0) return -1;
+       m = open("/dev/ptmx", O_RDWR|O_NOCTTY);
+       if (m < 0) return -1;
 
-       if (ioctl(*m, TIOCSPTLCK, &n) || ioctl (*m, TIOCGPTN, &n)) {
-               close(*m);
+       if (ioctl(m, TIOCSPTLCK, &n) || ioctl (m, TIOCGPTN, &n)) {
+               close(m);
                return -1;
        }
 
        if (!name) name = buf;
        snprintf(name, sizeof buf, "/dev/pts/%d", n);
-       if ((*s = open(name, O_RDWR|O_NOCTTY)) < 0) {
-               close(*m);
+       if ((s = open(name, O_RDWR|O_NOCTTY)) < 0) {
+               close(m);
                return -1;
        }
 
-       if (tio) tcsetattr(*s, TCSANOW, tio);
-       if (ws) ioctl(*s, TIOCSWINSZ, ws);
+       if (tio) tcsetattr(s, TCSANOW, tio);
+       if (ws) ioctl(s, TIOCSWINSZ, ws);
 
+       *pm = m;
+       *ps = s;
        return 0;
 }