00001
00006 #include "sceptre.h"
00007 #include "device.h"
00008
00009
00019 _ssize_t _write_r(struct _reent *p_reent, int fd, const void *p_data, size_t data_size)
00020 {
00021 int index;
00022
00023
00024 if (data_size==0) return data_size;
00025
00026 switch (fd)
00027 {
00028 case SCEPTRE_STDIN:
00029 break;
00030
00031 case SCEPTRE_STDOUT:
00032 case SCEPTRE_STDERR:
00033 {
00034 int i;
00035 char *p_str = (char *)p_data;
00036 for (i=0; i<data_size; i++)
00037 {
00038 if (*p_str=='\n')
00039 {
00040 if (uart0_putc('\r')==false) break;
00041 }
00042 if (uart0_putc(*p_str++)==false) break;
00043 }
00044
00045 return data_size - i;
00046 }
00047 break;
00048 }
00049
00050
00051 if ((index = device_find(p_reent,DEVICE_TYPE(fd)))==-1) return -1;
00052
00053
00054 if (device_table_list[index].p_item->write)
00055 {
00056 return device_table_list[index].p_item->write(p_reent,fd,p_data,data_size);
00057 }
00058
00059 p_reent->_errno = EBADF;
00060 return -1;
00061 }
00062