PR libstdc++/13731 (first part: write)
2004-02-11 Paolo Carlini <pcarlini@suse.de> PR libstdc++/13731 (first part: write) * config/io/basic_file_stdio.h (__basic_file<char>::xwrite): New, declare. * config/io/basic_file_stdio.cc (__basic_file<char>::xwrite): Define it: a wrapper around write() handling partial write. (__basic_file<char>::xsputn): Use it. (__basic_file<char>::xsputn_2): Likewise. From-SVN: r77680
This commit is contained in:
parent
888ff7a125
commit
98e9678463
3 changed files with 35 additions and 19 deletions
|
@ -1,3 +1,13 @@
|
|||
2004-02-11 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
PR libstdc++/13731 (first part: write)
|
||||
* config/io/basic_file_stdio.h (__basic_file<char>::xwrite):
|
||||
New, declare.
|
||||
* config/io/basic_file_stdio.cc (__basic_file<char>::xwrite):
|
||||
Define it: a wrapper around write() handling partial write.
|
||||
(__basic_file<char>::xsputn): Use it.
|
||||
(__basic_file<char>::xsputn_2): Likewise.
|
||||
|
||||
2004-02-11 Paolo Carlini <pcarlini@suse.de>
|
||||
Petur Runolfsson <peturr02@ru.is>
|
||||
|
||||
|
|
|
@ -200,16 +200,28 @@ namespace std
|
|||
while (__ret == -1L && errno == EINTR);
|
||||
return __ret;
|
||||
}
|
||||
|
||||
|
||||
// Wrapper handling partial write.
|
||||
streamsize
|
||||
__basic_file<char>::xwrite(const char* __s, streamsize __n)
|
||||
{
|
||||
streamsize __nleft = __n;
|
||||
while (__nleft > 0)
|
||||
{
|
||||
const streamsize __ret = write(this->fd(), __s, __nleft);
|
||||
if (__ret == -1L && errno == EINTR)
|
||||
continue;
|
||||
else if (__ret == -1L)
|
||||
break;
|
||||
__nleft -= __ret;
|
||||
__s += __ret;
|
||||
}
|
||||
return __n - __nleft;
|
||||
}
|
||||
|
||||
streamsize
|
||||
__basic_file<char>::xsputn(const char* __s, streamsize __n)
|
||||
{
|
||||
streamsize __ret;
|
||||
do
|
||||
__ret = write(this->fd(), __s, __n);
|
||||
while (__ret == -1L && errno == EINTR);
|
||||
return __ret;
|
||||
}
|
||||
{ return __basic_file<char>::xwrite(__s, __n); }
|
||||
|
||||
streamsize
|
||||
__basic_file<char>::xsputn_2(const char* __s1, streamsize __n1,
|
||||
|
@ -228,19 +240,10 @@ namespace std
|
|||
while (__ret == -1L && errno == EINTR);
|
||||
#else
|
||||
if (__n1)
|
||||
do
|
||||
__ret = write(this->fd(), __s1, __n1);
|
||||
while (__ret == -1L && errno == EINTR);
|
||||
__ret = __basic_file<char>::xwrite(__s1, __n1);
|
||||
|
||||
if (__ret == __n1)
|
||||
{
|
||||
do
|
||||
__ret = write(this->fd(), __s2, __n2);
|
||||
while (__ret == -1L && errno == EINTR);
|
||||
|
||||
if (__ret != -1L)
|
||||
__ret += __n1;
|
||||
}
|
||||
__ret += __basic_file<char>::xwrite(__s2, __n2);
|
||||
#endif
|
||||
return __ret;
|
||||
}
|
||||
|
|
|
@ -83,6 +83,9 @@ namespace std
|
|||
|
||||
~__basic_file();
|
||||
|
||||
streamsize
|
||||
xwrite(const char* __s, streamsize __n);
|
||||
|
||||
streamsize
|
||||
xsputn(const char* __s, streamsize __n);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue