OSDN Git Service

2007-04-28 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 28 Apr 2007 23:23:35 +0000 (23:23 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 28 Apr 2007 23:23:35 +0000 (23:23 +0000)
PR libfortran/31501
* io/list_read.c (next_char): Fix whitespace.
* io/io.h: Remove prototypes and define macros for is_array_io,
is_stream_io, and is_internal_unit.
* io/unit.c (is_array_io), (is_internal_unit), (is_stream_io): Delete
these functions.
* io/transfer.c (read_sf): Change handling of internal_unit to make a
single call to salloc_r and use memcpy to transfer the data.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@124266 138bc75d-0d04-0410-961f-82ee72b054a4

libgfortran/ChangeLog
libgfortran/io/io.h
libgfortran/io/list_read.c
libgfortran/io/transfer.c
libgfortran/io/unit.c

index 983c64f..409c20d 100644 (file)
@@ -1,3 +1,14 @@
+2007-04-28  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libfortran/31501
+       * io/list_read.c (next_char): Fix whitespace.
+       * io/io.h: Remove prototypes and define macros for is_array_io,
+       is_stream_io, and is_internal_unit.
+       * io/unit.c (is_array_io), (is_internal_unit), (is_stream_io): Delete
+       these functions.
+       * io/transfer.c (read_sf): Change handling of internal_unit to make a
+       single call to salloc_r and use memcpy to transfer the data. 
+
 2007-04-27  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libfortran/31532
index 1e5a6c9..181c181 100644 (file)
@@ -80,6 +80,14 @@ stream;
 
 #define sset(s, c, n) ((s)->set)(s, c, n)
 
+/* Macros for testing what kinds of I/O we are doing.  */
+
+#define is_array_io(dtp) ((dtp)->internal_unit_desc)
+
+#define is_internal_unit(dtp) ((dtp)->u.p.unit_is_internal)
+
+#define is_stream_io(dtp) ((dtp)->u.p.current_unit->flags.access == ACCESS_STREAM)
+
 /* The array_loop_spec contains the variables for the loops over index ranges
    that are encountered.  Since the variables can be negative, ssize_t
    is used.  */
@@ -672,15 +680,6 @@ internal_proto(get_internal_unit);
 extern void free_internal_unit (st_parameter_dt *);
 internal_proto(free_internal_unit);
 
-extern int is_internal_unit (st_parameter_dt *);
-internal_proto(is_internal_unit);
-
-extern int is_array_io (st_parameter_dt *);
-internal_proto(is_array_io);
-
-extern int is_stream_io (st_parameter_dt *);
-internal_proto(is_stream_io);
-
 extern gfc_unit *find_unit (int);
 internal_proto(find_unit);
 
index 3203f31..9e2e0f9 100644 (file)
@@ -165,7 +165,7 @@ next_char (st_parameter_dt *dtp)
 
   /* Handle the end-of-record and end-of-file conditions for
      internal array unit.  */
-  if (is_array_io(dtp))
+  if (is_array_io (dtp))
     {
       if (dtp->u.p.at_eof)
        longjmp (*dtp->u.p.eof_jump, 1);
@@ -201,9 +201,9 @@ next_char (st_parameter_dt *dtp)
   if (is_stream_io (dtp))
     dtp->u.p.current_unit->strm_pos++;
 
-  if (is_internal_unit(dtp))
+  if (is_internal_unit (dtp))
     {
-      if (is_array_io(dtp))
+      if (is_array_io (dtp))
        {
          /* End of record is handled in the next pass through, above.  The
             check for NULL here is cautionary.  */
index ac5f11b..13bb272 100644 (file)
@@ -164,18 +164,19 @@ read_sf (st_parameter_dt *dtp, int *length, int no_error)
       return base;
     }
 
+  if (is_internal_unit (dtp))
+    {
+      readlen = *length;
+      q = salloc_r (dtp->u.p.current_unit->s, &readlen);
+      memcpy (p, q, readlen);
+      goto done;
+    }
+
   readlen = 1;
   n = 0;
 
   do
     {
-      if (is_internal_unit (dtp))
-       {
-         /* readlen may be modified inside salloc_r if
-            is_internal_unit (dtp) is true.  */
-         readlen = 1;
-       }
-
       q = salloc_r (dtp->u.p.current_unit->s, &readlen);
       if (q == NULL)
        break;
@@ -244,6 +245,8 @@ read_sf (st_parameter_dt *dtp, int *length, int no_error)
       dtp->u.p.sf_seen_eor = 0;
     }
   while (n < *length);
+
+ done:
   dtp->u.p.current_unit->bytes_left -= *length;
 
   if ((dtp->common.flags & IOPARM_DT_HAS_SIZE) != 0)
index 7a4000d..c468510 100644 (file)
@@ -476,33 +476,6 @@ get_unit (st_parameter_dt *dtp, int do_create)
 }
 
 
-/* is_internal_unit()-- Determine if the current unit is internal or not */
-
-int
-is_internal_unit (st_parameter_dt *dtp)
-{
-  return dtp->u.p.unit_is_internal;
-}
-
-
-/* is_array_io ()-- Determine if the I/O is to/from an array */
-
-int
-is_array_io (st_parameter_dt *dtp)
-{
-  return dtp->internal_unit_desc != NULL;
-}
-
-
-/* is_stream_io () -- Determine if I/O is access="stream" mode */
-
-int
-is_stream_io (st_parameter_dt *dtp)
-{
-  return dtp->u.p.current_unit->flags.access == ACCESS_STREAM;
-}
-
-
 /*************************/
 /* Initialize everything */