svn commit: trunk/uClibc/libc/termios

carmelo at uclibc.org carmelo at uclibc.org
Tue Sep 9 12:10:17 UTC 2008


Author: carmelo
Date: 2008-09-09 05:10:17 -0700 (Tue, 09 Sep 2008)
New Revision: 23366

Log:
Fill in termios_p data structure only if ioctl syscall
doesn't fail (as glibc indeed does).

Signed-off-by: Carmelo Amoroso <carmelo.amoroso at st.com>


Modified:
   trunk/uClibc/libc/termios/tcgetattr.c


Changeset:
Modified: trunk/uClibc/libc/termios/tcgetattr.c
===================================================================
--- trunk/uClibc/libc/termios/tcgetattr.c	2008-09-09 12:06:58 UTC (rev 23365)
+++ trunk/uClibc/libc/termios/tcgetattr.c	2008-09-09 12:10:17 UTC (rev 23366)
@@ -41,40 +41,41 @@
     int retval;
 
     retval = ioctl (fd, TCGETS, &k_termios);
-
-    termios_p->c_iflag = k_termios.c_iflag;
-    termios_p->c_oflag = k_termios.c_oflag;
-    termios_p->c_cflag = k_termios.c_cflag;
-    termios_p->c_lflag = k_termios.c_lflag;
-    termios_p->c_line = k_termios.c_line;
+	if(likely(retval == 0)) {
+		termios_p->c_iflag = k_termios.c_iflag;
+		termios_p->c_oflag = k_termios.c_oflag;
+		termios_p->c_cflag = k_termios.c_cflag;
+		termios_p->c_lflag = k_termios.c_lflag;
+		termios_p->c_line = k_termios.c_line;
 #ifdef _HAVE_C_ISPEED
-    termios_p->c_ispeed = k_termios.c_ispeed;
+		termios_p->c_ispeed = k_termios.c_ispeed;
 #endif
 #ifdef _HAVE_C_OSPEED
-    termios_p->c_ospeed = k_termios.c_ospeed;
+		termios_p->c_ospeed = k_termios.c_ospeed;
 #endif
 
 
-    if (sizeof (cc_t) == 1 || _POSIX_VDISABLE == 0
-	    || (unsigned char) _POSIX_VDISABLE == (unsigned char) -1)
-    {
-	memset (mempcpy (&termios_p->c_cc[0], &k_termios.c_cc[0],
-		    __KERNEL_NCCS * sizeof (cc_t)),
-		_POSIX_VDISABLE, (NCCS - __KERNEL_NCCS) * sizeof (cc_t));
+		if (sizeof (cc_t) == 1 || _POSIX_VDISABLE == 0
+			|| (unsigned char) _POSIX_VDISABLE == (unsigned char) -1)
+		{
+		memset (mempcpy (&termios_p->c_cc[0], &k_termios.c_cc[0],
+				__KERNEL_NCCS * sizeof (cc_t)),
+			_POSIX_VDISABLE, (NCCS - __KERNEL_NCCS) * sizeof (cc_t));
 #if 0
-	memset ( (memcpy (&termios_p->c_cc[0], &k_termios.c_cc[0],
-			__KERNEL_NCCS * sizeof (cc_t)) + (__KERNEL_NCCS * sizeof (cc_t))) ,
-		_POSIX_VDISABLE, (NCCS - __KERNEL_NCCS) * sizeof (cc_t));
+		memset ( (memcpy (&termios_p->c_cc[0], &k_termios.c_cc[0],
+				__KERNEL_NCCS * sizeof (cc_t)) + (__KERNEL_NCCS * sizeof (cc_t))) ,
+			_POSIX_VDISABLE, (NCCS - __KERNEL_NCCS) * sizeof (cc_t));
 #endif
-    } else {
-	size_t cnt;
+		} else {
+		size_t cnt;
 
-	memcpy (&termios_p->c_cc[0], &k_termios.c_cc[0],
-		__KERNEL_NCCS * sizeof (cc_t));
+		memcpy (&termios_p->c_cc[0], &k_termios.c_cc[0],
+			__KERNEL_NCCS * sizeof (cc_t));
 
-	for (cnt = __KERNEL_NCCS; cnt < NCCS; ++cnt)
-	    termios_p->c_cc[cnt] = _POSIX_VDISABLE;
-    }
+		for (cnt = __KERNEL_NCCS; cnt < NCCS; ++cnt)
+			termios_p->c_cc[cnt] = _POSIX_VDISABLE;
+		}
+	}
 
     return retval;
 }




More information about the uClibc-cvs mailing list