Commit 98e96784 by Paolo Carlini Committed by Paolo Carlini

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
parent 888ff7a1
2004-02-11 Paolo Carlini <pcarlini@suse.de> 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> Petur Runolfsson <peturr02@ru.is>
PR libstdc++/14078 PR libstdc++/14078
......
...@@ -200,16 +200,28 @@ namespace std ...@@ -200,16 +200,28 @@ namespace std
while (__ret == -1L && errno == EINTR); while (__ret == -1L && errno == EINTR);
return __ret; return __ret;
} }
streamsize // Wrapper handling partial write.
__basic_file<char>::xsputn(const char* __s, streamsize __n) streamsize
__basic_file<char>::xwrite(const char* __s, streamsize __n)
{ {
streamsize __ret; streamsize __nleft = __n;
do while (__nleft > 0)
__ret = write(this->fd(), __s, __n); {
while (__ret == -1L && errno == EINTR); const streamsize __ret = write(this->fd(), __s, __nleft);
return __ret; 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)
{ return __basic_file<char>::xwrite(__s, __n); }
streamsize streamsize
__basic_file<char>::xsputn_2(const char* __s1, streamsize __n1, __basic_file<char>::xsputn_2(const char* __s1, streamsize __n1,
...@@ -228,19 +240,10 @@ namespace std ...@@ -228,19 +240,10 @@ namespace std
while (__ret == -1L && errno == EINTR); while (__ret == -1L && errno == EINTR);
#else #else
if (__n1) if (__n1)
do __ret = __basic_file<char>::xwrite(__s1, __n1);
__ret = write(this->fd(), __s1, __n1);
while (__ret == -1L && errno == EINTR);
if (__ret == __n1) if (__ret == __n1)
{ __ret += __basic_file<char>::xwrite(__s2, __n2);
do
__ret = write(this->fd(), __s2, __n2);
while (__ret == -1L && errno == EINTR);
if (__ret != -1L)
__ret += __n1;
}
#endif #endif
return __ret; return __ret;
} }
......
...@@ -84,6 +84,9 @@ namespace std ...@@ -84,6 +84,9 @@ namespace std
~__basic_file(); ~__basic_file();
streamsize streamsize
xwrite(const char* __s, streamsize __n);
streamsize
xsputn(const char* __s, streamsize __n); xsputn(const char* __s, streamsize __n);
streamsize streamsize
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment