git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Usermode/libc - Fix strchr and strrchr behavior
[tpg/acess2.git]
/
Usermode
/
Libraries
/
libc.so_src
/
stdio.c
diff --git
a/Usermode/Libraries/libc.so_src/stdio.c
b/Usermode/Libraries/libc.so_src/stdio.c
index
1bb90cd
..
55fd521
100644
(file)
--- a/
Usermode/Libraries/libc.so_src/stdio.c
+++ b/
Usermode/Libraries/libc.so_src/stdio.c
@@
-14,6
+14,9
@@
\r
#define DEBUG_BUILD 0
\r
\r
\r
#define DEBUG_BUILD 0
\r
\r
+#define LOG_WARN(f,...) _SysDebug("WARN: %s: "f, __func__ ,## __VA_ARGS__)
\r
+#define LOG_NOTICE(f,...) _SysDebug("NOTE: %s: "f, __func__ ,## __VA_ARGS__)
\r
+
\r
// === CONSTANTS ===
\r
#define _stdin 0
\r
#define _stdout 1
\r
// === CONSTANTS ===
\r
#define _stdin 0
\r
#define _stdout 1
\r
@@
-27,9
+30,9
@@
struct sFILE *get_file_struct();
\r
// === GLOBALS ===
\r
struct sFILE _iob[STDIO_MAX_STREAMS]; // IO Buffer
\r
\r
// === GLOBALS ===
\r
struct sFILE _iob[STDIO_MAX_STREAMS]; // IO Buffer
\r
-struct sFILE *stdin
;
// Standard Input
\r
-struct sFILE *stdout
;
// Standard Output
\r
-struct sFILE *stderr
;
// Standard Error
\r
+struct sFILE *stdin
= &_iob[0];
// Standard Input
\r
+struct sFILE *stdout
= &_iob[1];
// Standard Output
\r
+struct sFILE *stderr
= &_iob[2];
// Standard Error
\r
///\note Initialised in SoMain
\r
static const int STDIN_BUFSIZ = 512;
\r
static const int STDOUT_BUFSIZ = 512;
\r
///\note Initialised in SoMain
\r
static const int STDIN_BUFSIZ = 512;
\r
static const int STDOUT_BUFSIZ = 512;
\r
@@
-38,19
+41,16
@@
static const int STDOUT_BUFSIZ = 512;
void _stdio_init(void)
\r
{
\r
// Init FileIO Pointers
\r
void _stdio_init(void)
\r
{
\r
// Init FileIO Pointers
\r
- stdin = &_iob[0];
\r
stdin->FD = 0;
\r
stdin->Flags = FILE_FLAG_ALLOC|FILE_FLAG_MODE_READ|FILE_FLAG_LINEBUFFERED|FILE_FLAG_OURBUFFER;
\r
stdin->Buffer = malloc(STDIN_BUFSIZ);
\r
stdin->BufferSpace = STDIN_BUFSIZ;
\r
\r
stdin->FD = 0;
\r
stdin->Flags = FILE_FLAG_ALLOC|FILE_FLAG_MODE_READ|FILE_FLAG_LINEBUFFERED|FILE_FLAG_OURBUFFER;
\r
stdin->Buffer = malloc(STDIN_BUFSIZ);
\r
stdin->BufferSpace = STDIN_BUFSIZ;
\r
\r
- stdout = &_iob[1];
\r
stdout->FD = 1;
\r
stdout->Flags = FILE_FLAG_ALLOC|FILE_FLAG_MODE_WRITE|FILE_FLAG_LINEBUFFERED|FILE_FLAG_OURBUFFER;
\r
stdout->Buffer = malloc(STDOUT_BUFSIZ);
\r
stdout->BufferSpace = STDOUT_BUFSIZ;
\r
\r
stdout->FD = 1;
\r
stdout->Flags = FILE_FLAG_ALLOC|FILE_FLAG_MODE_WRITE|FILE_FLAG_LINEBUFFERED|FILE_FLAG_OURBUFFER;
\r
stdout->Buffer = malloc(STDOUT_BUFSIZ);
\r
stdout->BufferSpace = STDOUT_BUFSIZ;
\r
\r
- stderr = &_iob[2];
\r
stderr->FD = 2;
\r
stderr->Flags = FILE_FLAG_ALLOC|FILE_FLAG_MODE_WRITE;
\r
}
\r
stderr->FD = 2;
\r
stderr->Flags = FILE_FLAG_ALLOC|FILE_FLAG_MODE_WRITE;
\r
}
\r
@@
-374,22
+374,23
@@
int _fflush_int(FILE *fp)
return ret;
\r
}
\r
\r
return ret;
\r
}
\r
\r
-EXPORT
void
fflush(FILE *fp)
\r
+EXPORT
int
fflush(FILE *fp)
\r
{
\r
if( !fp || fp->FD == FD_NOTOPEN )
\r
{
\r
if( !fp || fp->FD == FD_NOTOPEN )
\r
- return ;
\r
+ return
EBADF
;
\r
\r
// Nothing to do for memory files
\r
if( fp->FD == FD_MEMFILE )
\r
\r
// Nothing to do for memory files
\r
if( fp->FD == FD_MEMFILE )
\r
- return ;
\r
+ return
0
;
\r
// Memory streams, update pointers
\r
if( fp->FD == FD_MEMSTREAM ) {
\r
*fp->BufPtr = fp->Buffer;
\r
*fp->LenPtr = fp->BufferPos;
\r
// Memory streams, update pointers
\r
if( fp->FD == FD_MEMSTREAM ) {
\r
*fp->BufPtr = fp->Buffer;
\r
*fp->LenPtr = fp->BufferPos;
\r
- return ;
\r
+ return
0
;
\r
}
\r
\r
_fflush_int(fp);
\r
}
\r
\r
_fflush_int(fp);
\r
+ return 0;
\r
}
\r
\r
EXPORT void clearerr(FILE *fp)
\r
}
\r
\r
EXPORT void clearerr(FILE *fp)
\r
@@
-681,19
+682,28
@@
EXPORT size_t fread(void *ptr, size_t size, size_t num, FILE *fp)
{
\r
size_t ret;
\r
\r
{
\r
size_t ret;
\r
\r
- if(!fp || fp->FD == -1)
\r
+ if(!fp || fp->FD == -1) {
\r
+ LOG_WARN("bad fp %p", fp);
\r
return -1;
\r
return -1;
\r
+ }
\r
if( size == 0 || num == 0 )
\r
return 0;
\r
\r
if( _GetFileMode(fp) != FILE_FLAG_MODE_READ ) {
\r
errno = 0;
\r
if( size == 0 || num == 0 )
\r
return 0;
\r
\r
if( _GetFileMode(fp) != FILE_FLAG_MODE_READ ) {
\r
errno = 0;
\r
+ LOG_WARN("not open for read");
\r
+ if( fp == stdin ) {
\r
+ LOG_WARN("BUGCHECK FAIL: stdin was not open for read");
\r
+ exit(129);
\r
+ }
\r
return -1;
\r
}
\r
\r
// Don't read if EOF is set
\r
return -1;
\r
}
\r
\r
// Don't read if EOF is set
\r
- if( fp->Flags & FILE_FLAG_EOF )
\r
+ if( fp->Flags & FILE_FLAG_EOF ) {
\r
+ LOG_NOTICE("EOF");
\r
return 0;
\r
return 0;
\r
+ }
\r
\r
\r
if( fp->FD == FD_MEMFILE ) {
\r
\r
\r
if( fp->FD == FD_MEMFILE ) {
\r
@@
-701,6
+711,7
@@
EXPORT size_t fread(void *ptr, size_t size, size_t num, FILE *fp)
}
\r
else if( fp->FD == FD_MEMSTREAM ) {
\r
//return _fread_memstream(ptr, size, num, fp);
\r
}
\r
else if( fp->FD == FD_MEMSTREAM ) {
\r
//return _fread_memstream(ptr, size, num, fp);
\r
+ LOG_WARN("Reading from a mem stream");
\r
errno = EBADF;
\r
return 0;
\r
}
\r
errno = EBADF;
\r
return 0;
\r
}
\r
@@
-744,6
+755,8
@@
EXPORT size_t fread(void *ptr, size_t size, size_t num, FILE *fp)
extra, size, num
\r
);
\r
}
\r
extra, size, num
\r
);
\r
}
\r
+ LOG_NOTICE("Incomplete read %i/%i bytes (object size %i)",
\r
+ ret, bytes, size);
\r
}
\r
\r
return ret / size;
\r
}
\r
\r
return ret / size;
\r
@@
-782,13
+795,12
@@
EXPORT char *fgets(char *s, int size, FILE *fp)
*/
\r
EXPORT int fputc(int c, FILE *fp)
\r
{
\r
*/
\r
EXPORT int fputc(int c, FILE *fp)
\r
{
\r
-
char
ch = c;
\r
+
unsigned char
ch = c;
\r
return fwrite(&ch, 1, 1, fp);
\r
}
\r
\r
EXPORT int putchar(int c)
\r
{
\r
return fwrite(&ch, 1, 1, fp);
\r
}
\r
\r
EXPORT int putchar(int c)
\r
{
\r
- c &= 0xFF;
\r
return fputc(c, stdout);
\r
}
\r
\r
return fputc(c, stdout);
\r
}
\r
\r
@@
-798,7
+810,7
@@
EXPORT int putchar(int c)
*/
\r
EXPORT int fgetc(FILE *fp)
\r
{
\r
*/
\r
EXPORT int fgetc(FILE *fp)
\r
{
\r
-
char
ret = 0;
\r
+
unsigned char
ret = 0;
\r
if( fread(&ret, 1, 1, fp) != 1 )
\r
return -1;
\r
return ret;
\r
if( fread(&ret, 1, 1, fp) != 1 )
\r
return -1;
\r
return ret;
\r
@@
-812,7
+824,6
@@
EXPORT int getchar(void)
\r
EXPORT int puts(const char *str)
\r
{
\r
\r
EXPORT int puts(const char *str)
\r
{
\r
-
\r
if(!str) return 0;
\r
int len = strlen(str);
\r
\r
if(!str) return 0;
\r
int len = strlen(str);
\r
\r
UCC
git Repository :: git.ucc.asn.au