Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
a2c037bd
Commit
a2c037bd
authored
Feb 23, 2011
by
Janne Blomqvist
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
PR 47694 Read from named pipe fails
Co-Authored-By: Jerry DeLisle <jvdelisle@gcc.gnu.org> From-SVN: r170432
parent
ff72e86d
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
28 additions
and
18 deletions
+28
-18
libgfortran/ChangeLog
+8
-0
libgfortran/io/fbuf.h
+6
-0
libgfortran/io/transfer.c
+14
-18
No files found.
libgfortran/ChangeLog
View file @
a2c037bd
2011-02-23 Janne Blomqvist <jb@gcc.gnu.org>
Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/47694
* io/fbuf.h (fbuf_getptr): New inline function.
* io/transfer.c (read_sf): Use fbuf_getptr and fbuf_getc to scan
through the string instead of fbuf_read.
2011-02-22 Tobias Burnus <burnus@net-b.de>
2011-02-22 Tobias Burnus <burnus@net-b.de>
Kai-Uwe Eckhardt <kuehro@gmx.de>
Kai-Uwe Eckhardt <kuehro@gmx.de>
...
...
libgfortran/io/fbuf.h
View file @
a2c037bd
...
@@ -78,4 +78,10 @@ fbuf_getc (gfc_unit * u)
...
@@ -78,4 +78,10 @@ fbuf_getc (gfc_unit * u)
return
fbuf_getc_refill
(
u
);
return
fbuf_getc_refill
(
u
);
}
}
static
inline
char
*
fbuf_getptr
(
gfc_unit
*
u
)
{
return
(
char
*
)
(
u
->
fbuf
->
buf
+
u
->
fbuf
->
pos
);
}
#endif
#endif
libgfortran/io/transfer.c
View file @
a2c037bd
...
@@ -284,7 +284,8 @@ static char *
...
@@ -284,7 +284,8 @@ static char *
read_sf
(
st_parameter_dt
*
dtp
,
int
*
length
)
read_sf
(
st_parameter_dt
*
dtp
,
int
*
length
)
{
{
static
char
*
empty_string
[
0
];
static
char
*
empty_string
[
0
];
char
*
base
,
*
p
,
q
;
char
*
base
;
int
q
,
q2
;
int
n
,
lorig
,
seen_comma
;
int
n
,
lorig
,
seen_comma
;
/* If we have seen an eor previously, return a length of 0. The
/* If we have seen an eor previously, return a length of 0. The
...
@@ -301,18 +302,18 @@ read_sf (st_parameter_dt *dtp, int * length)
...
@@ -301,18 +302,18 @@ read_sf (st_parameter_dt *dtp, int * length)
/* Read data into format buffer and scan through it. */
/* Read data into format buffer and scan through it. */
lorig
=
*
length
;
lorig
=
*
length
;
base
=
p
=
fbuf_read
(
dtp
->
u
.
p
.
current_unit
,
length
);
base
=
fbuf_getptr
(
dtp
->
u
.
p
.
current_unit
);
if
(
base
==
NULL
)
if
(
base
==
NULL
)
return
NULL
;
return
NULL
;
while
(
n
<
*
length
)
while
(
n
<
*
length
)
{
{
q
=
*
p
;
q
=
fbuf_getc
(
dtp
->
u
.
p
.
current_unit
);
if
(
q
==
EOF
)
if
(
q
==
'\n'
||
q
==
'\r'
)
break
;
else
if
(
q
==
'\n'
||
q
==
'\r'
)
{
{
/* Unexpected end of line. Set the position. */
/* Unexpected end of line. Set the position. */
fbuf_seek
(
dtp
->
u
.
p
.
current_unit
,
n
+
1
,
SEEK_CUR
);
dtp
->
u
.
p
.
sf_seen_eor
=
1
;
dtp
->
u
.
p
.
sf_seen_eor
=
1
;
/* If we see an EOR during non-advancing I/O, we need to skip
/* If we see an EOR during non-advancing I/O, we need to skip
...
@@ -323,15 +324,12 @@ read_sf (st_parameter_dt *dtp, int * length)
...
@@ -323,15 +324,12 @@ read_sf (st_parameter_dt *dtp, int * length)
/* If we encounter a CR, it might be a CRLF. */
/* If we encounter a CR, it might be a CRLF. */
if
(
q
==
'\r'
)
/* Probably a CRLF */
if
(
q
==
'\r'
)
/* Probably a CRLF */
{
{
/* See if there is an LF. Use fbuf_read rather then fbuf_getc so
/* See if there is an LF. */
the position is not advanced unless it really is an LF. */
q2
=
fbuf_getc
(
dtp
->
u
.
p
.
current_unit
);
int
readlen
=
1
;
if
(
q2
==
'\n'
)
p
=
fbuf_read
(
dtp
->
u
.
p
.
current_unit
,
&
readlen
);
if
(
*
p
==
'\n'
&&
readlen
==
1
)
{
dtp
->
u
.
p
.
sf_seen_eor
=
2
;
dtp
->
u
.
p
.
sf_seen_eor
=
2
;
fbuf_seek
(
dtp
->
u
.
p
.
current_unit
,
1
,
SEEK_CUR
);
else
if
(
q2
!=
EOF
)
/* Oops, seek back. */
}
fbuf_seek
(
dtp
->
u
.
p
.
current_unit
,
-
1
,
SEEK_CUR
);
}
}
/* Without padding, terminate the I/O statement without assigning
/* Without padding, terminate the I/O statement without assigning
...
@@ -349,20 +347,18 @@ read_sf (st_parameter_dt *dtp, int * length)
...
@@ -349,20 +347,18 @@ read_sf (st_parameter_dt *dtp, int * length)
/* Short circuit the read if a comma is found during numeric input.
/* Short circuit the read if a comma is found during numeric input.
The flag is set to zero during character reads so that commas in
The flag is set to zero during character reads so that commas in
strings are not ignored */
strings are not ignored */
if
(
q
==
','
)
else
if
(
q
==
','
)
if
(
dtp
->
u
.
p
.
sf_read_comma
==
1
)
if
(
dtp
->
u
.
p
.
sf_read_comma
==
1
)
{
{
seen_comma
=
1
;
seen_comma
=
1
;
notify_std
(
&
dtp
->
common
,
GFC_STD_GNU
,
notify_std
(
&
dtp
->
common
,
GFC_STD_GNU
,
"Comma in formatted numeric read."
);
"Comma in formatted numeric read."
);
*
length
=
n
;
break
;
break
;
}
}
n
++
;
n
++
;
p
++
;
}
}
fbuf_seek
(
dtp
->
u
.
p
.
current_unit
,
n
+
seen_comma
,
SEEK_CUR
)
;
*
length
=
n
;
/* A short read implies we hit EOF, unless we hit EOR, a comma, or
/* A short read implies we hit EOF, unless we hit EOR, a comma, or
some other stuff. Set the relevant flags. */
some other stuff. Set the relevant flags. */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment