@@ -144,78 +144,85 @@ int _sys_close(FILEHANDLE fh)
144144 */
145145int _sys_read (FILEHANDLE fh , unsigned char * buf , unsigned len , int mode )
146146{
147- #ifdef RT_USING_POSIX_STDIO
147+ #ifdef RT_USING_POSIX
148148 int size ;
149149
150150 if (fh == STDIN )
151151 {
152+ #ifdef RT_USING_POSIX_STDIO
152153 if (libc_stdio_get_console () < 0 )
153154 {
154155 LOG_W ("Do not invoke standard output before initializing libc" );
155- return 0 ;
156+ return 0 ; /* error, but keep going */
156157 }
157158 size = read (STDIN_FILENO , buf , len );
158- return len - size ;
159+ return 0 ; /* success */
160+ #else
161+ return 0 ; /* error */
162+ #endif
159163 }
160- else if (( fh == STDOUT ) || ( fh == STDERR ) )
164+ else if (fh == STDOUT || fh == STDERR )
161165 {
162166 return 0 ; /* error */
163167 }
164-
165- size = read (fh , buf , len );
166- if (size >= 0 )
167- return len - size ;
168168 else
169- return 0 ; /* error */
169+ {
170+ size = read (fh , buf , len );
171+ if (size >= 0 )
172+ return len - size ; /* success */
173+ else
174+ return 0 ; /* error */
175+ }
170176#else
171177 return 0 ; /* error */
172- #endif /* RT_USING_POSIX_STDIO */
178+ #endif /* RT_USING_POSIX */
173179}
174180
175181/*
176182 * Write to a file. Returns 0 on success, negative on error, and
177183 * the number of characters _not_ written on partial success.
178184 * `mode' exists for historical reasons and must be ignored.
185+ * The return value is either:
186+ * A positive number representing the number of characters not written
187+ * (so any nonzero return value denotes a failure of some sort).
188+ * A negative number indicating an error.
179189 */
180190int _sys_write (FILEHANDLE fh , const unsigned char * buf , unsigned len , int mode )
181191{
182192#ifdef RT_USING_POSIX
183193 int size ;
184194#endif /* RT_USING_POSIX */
185195
186- if (( fh == STDOUT ) || ( fh == STDERR ) )
196+ if (fh == STDOUT || fh == STDERR )
187197 {
188- #ifdef RT_USING_POSIX_STDIO
189- if (libc_stdio_get_console () < 0 )
190- {
191- LOG_W ("Do not invoke standard input before initializing libc" );
192- return 0 ;
193- }
194- size = write (STDOUT_FILENO , buf , len );
195- return len - size ;
196- #elif defined(RT_USING_CONSOLE )
197- if (rt_console_get_device ())
198+ #ifdef RT_USING_CONSOLE
199+ rt_device_t console ;
200+ console = rt_console_get_device ();
201+ if (console )
198202 {
199- rt_device_write (rt_console_get_device () , -1 , buf , len );
203+ rt_device_write (console , -1 , buf , len );
200204 }
201-
205+ return 0 ; /* success */
206+ #else
202207 return 0 ; /* error */
203- #endif /* RT_USING_POSIX_STDIO */
208+ #endif /* RT_USING_CONSOLE */
204209 }
205210 else if (fh == STDIN )
206211 {
207212 return 0 ; /* error */
208213 }
209-
210- #ifdef RT_USING_POSIX
211- size = write (fh , buf , len );
212- if (size >= 0 )
213- return len - size ;
214214 else
215- return 0 ; /* error */
215+ {
216+ #ifdef RT_USING_POSIX
217+ size = write (fh , buf , len );
218+ if (size >= 0 )
219+ return 0 ; /* success */
220+ else
221+ return 0 ; /* error */
216222#else
217- return 0 ;
223+ return 0 ; /* error */
218224#endif /* RT_USING_POSIX */
225+ }
219226}
220227
221228/*
0 commit comments