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