update from main archvie 961013 libc-961015
authordrepper <drepper>
Sun, 13 Oct 1996 21:35:35 +0000 (21:35 +0000)
committerdrepper <drepper>
Sun, 13 Oct 1996 21:35:35 +0000 (21:35 +0000)
termios/cfsetspeed.c
time/strptime.c

index a4a205b..5f22ead 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1993 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1993, 1996 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -16,16 +16,104 @@ License along with the GNU C Library; see the file COPYING.LIB.  If
 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
-#include <ansidecl.h>
 #include <termios.h>
 #include <errno.h>
 #include <stddef.h>
 
+static struct speed_struct
+{
+  speed_t value;
+  speed_t internal;
+} speeds[] =
+  {
+#ifdef B0
+    { 0, B0 },
+#endif
+#ifdef B50
+    { 50, B50 },
+#endif
+#ifdef B75
+    { 75, B75 },
+#endif
+#ifdef B110
+    { 110, B110 },
+#endif
+#ifdef B134
+    { 134, B134 },
+#endif
+#ifdef B150
+    { 150, B150 },
+#endif
+#ifdef B200
+    { 200, B200 },
+#endif
+#ifdef B300
+    { 300, B300 },
+#endif
+#ifdef B600
+    { 600, B600 },
+#endif
+#ifdef B1200
+    { 1200, B1200 },
+#endif
+#ifdef B1200
+    { 1200, B1200 },
+#endif
+#ifdef B1800
+    { 1800, B1800 },
+#endif
+#ifdef B2400
+    { 2400, B2400 },
+#endif
+#ifdef B4800
+    { 4800, B4800 },
+#endif
+#ifdef B9600
+    { 9600, B9600 },
+#endif
+#ifdef B19200
+    { 19200, B19200 },
+#endif
+#ifdef B38400
+    { 38400, B38400 },
+#endif
+#ifdef B57600
+    { 57600, B57600 },
+#endif
+#ifdef B76800
+    { 76800, B76800 },
+#endif
+#ifdef B115200
+    { 115200, B115200 },
+#endif
+#ifdef B153600
+    { 153600, B153600 },
+#endif
+#ifdef B230400
+    { 230400, B230400 },
+#endif
+#ifdef B307200
+    { 307200, B307200 },
+#endif
+#ifdef B460800
+    { 460800, B460800 },
+#endif
+  };
+
+
 /* Set both the input and output baud rates stored in *TERMIOS_P to SPEED.  */
 void
-DEFUN(cfsetspeed, (termios_p, speed),
-      struct termios *termios_p AND speed_t speed)
+cfsetspeed (struct termios *termios_p, speed_t speed)
 {
-  cfsetispeed (termios_p, speed);
-  cfsetospeed (termios_p, speed);
+  size_t cnt;
+
+  for (cnt = 0; cnt < sizeof (speeds); ++cnt)
+    if (speed == speeds[cnt].value)
+      {
+       cfsetispeed (termios_p, speed);
+       cfsetospeed (termios_p, speed);
+       return;
+      }
+
+  __set_errno (EINVAL);
 }
index cb3d126..e2427e6 100644 (file)
@@ -70,7 +70,7 @@ Boston, MA 02111-1307, USA.  */
     if (rp == NULL)                                                          \
       return NULL;                                                           \
   } while (0)
-  
+
 
 char *
 strptime (const char *buf, const char *format, struct tm *tm)
@@ -211,6 +211,29 @@ strptime (const char *buf, const char *format, struct tm *tm)
        case 'R':
          recursive ("%H:%M");
          break;
+       case 's':
+         {
+           /* The number of seconds may be very high so we cannot use
+              the `get_number' macro.  Instead read the number
+              character for character and construct the result while
+              doing this.  */
+           time_t secs;
+           if (*rp < '0' || *rp > '9')
+             /* We need at least one digit.  */
+             return NULL;
+
+           do
+             {
+               secs *= 10;
+               secs += *rp++ - '0';
+             }
+           while (*rp >= '0' && *rp <= '9');
+
+           if (__localtime_r (&secs, tm) == NULL)
+             /* Error in function.  */
+             return NULL;
+         }
+         break;
        case 'S':
          get_number (0, 61);
          tm->tm_sec = val;
@@ -218,6 +241,23 @@ strptime (const char *buf, const char *format, struct tm *tm)
        case 'T':
          recursive ("%H:%M:%S");
          break;
+       case 'u':
+         get_number (1, 7);
+         tm->tm_wday = val % 7;
+         break;
+       case 'g':
+         get_number (0, 99);
+         /* XXX This cannot determine any field in TM.  */
+         break;
+       case 'G':
+         if (*rp < '0' || *rp > '9')
+           return NULL;
+         /* XXX Ignore the number since we would need some more
+            information to compute a real date.  */
+         do
+           ++rp;
+         while (*rp >= '0' && *rp <= '9');
+         break;
        case 'U':
        case 'V':
        case 'W':
@@ -339,6 +379,6 @@ strptime (const char *buf, const char *format, struct tm *tm)
 
   if (have_I && is_pm)
     tm->tm_hour += 12;
-  
+
   return (char *) rp;
 }