diff options
Diffstat (limited to 'src/user/lib')
-rw-r--r-- | src/user/lib/libc/include/readline.h | 6 | ||||
-rw-r--r-- | src/user/lib/libc/include/tce/syscall.h | 2 | ||||
-rw-r--r-- | src/user/lib/libc/std/ctype.c | 4 | ||||
-rw-r--r-- | src/user/lib/libc/std/readline.c | 38 | ||||
-rw-r--r-- | src/user/lib/libc/std/stdio.c | 2 | ||||
-rw-r--r-- | src/user/lib/libc/std/stdlib.c | 1 | ||||
-rw-r--r-- | src/user/lib/libc/tce/syscall.c | 2 |
7 files changed, 11 insertions, 44 deletions
diff --git a/src/user/lib/libc/include/readline.h b/src/user/lib/libc/include/readline.h index 9fa2ee7..b5e0a1a 100644 --- a/src/user/lib/libc/include/readline.h +++ b/src/user/lib/libc/include/readline.h @@ -13,9 +13,11 @@ typedef struct _rdln_hist { #ifdef __cplusplus extern "C" { namespace libc { #endif -char *readln(); -char* freadln(FILE *f); // minimal line-reading function. user must free the returned value. + + char* freadline(FILE *f, readline_history *h); + + #ifdef __cplusplus } } #endif diff --git a/src/user/lib/libc/include/tce/syscall.h b/src/user/lib/libc/include/tce/syscall.h index 4a1c6ef..478ed3e 100644 --- a/src/user/lib/libc/include/tce/syscall.h +++ b/src/user/lib/libc/include/tce/syscall.h @@ -23,7 +23,7 @@ int proc_priv(); void* sbrk(ptrdiff_t size); void brk(void* ptr); -int run(const char* file, const char** args, int zero_fd); +int run(const char* file, char** args, int zero_fd); int waitpid(int pid, int block); int open(const char* filename, int mode); diff --git a/src/user/lib/libc/std/ctype.c b/src/user/lib/libc/std/ctype.c index f0e7750..13f2ab0 100644 --- a/src/user/lib/libc/std/ctype.c +++ b/src/user/lib/libc/std/ctype.c @@ -15,14 +15,14 @@ int isalnum(int c) { int tolower(int c) { if (c >= 'A' && c <= 'Z') { - return c + ('a' - 'A'); + c += ('a' - 'A'); } return c; } int toupper(int c) { if (c >= 'a' && c <= 'z') { - return c - ('a' - 'A'); + c -= ('a' - 'A'); } return c; } diff --git a/src/user/lib/libc/std/readline.c b/src/user/lib/libc/std/readline.c index 4177bf6..5dfd442 100644 --- a/src/user/lib/libc/std/readline.c +++ b/src/user/lib/libc/std/readline.c @@ -1,44 +1,6 @@ #include <readline.h> #include <stdlib.h> -char* freadln(FILE *f) { - int i; - - char *p = (char*)malloc(256); - char *b = p; - - while (1) { - int l = fread(b, 255, 1, f); - if (l < 0) { - free(b); - return 0; - } - - for (i = 0; i < l; i++) { - if (b[i] == '\n') { - b[i+1] = 0; - return p; - } else if (b[i] == 27) { // ignore escape sequences - b[i] = 0; - l = i; - } - } - - int d = b - p + l; - - char* newp = (char*)malloc(d + 256); - memcpy(newp, p, d); - free(p); - p = newp; - b = p + d; - } -} - -char* readln() { - return freadln(&term); -} - - // ** READLINE char *freadline(FILE *f, readline_history *h) { diff --git a/src/user/lib/libc/std/stdio.c b/src/user/lib/libc/std/stdio.c index be65505..043cc59 100644 --- a/src/user/lib/libc/std/stdio.c +++ b/src/user/lib/libc/std/stdio.c @@ -42,6 +42,8 @@ void __tce_libc_fsetup(FILE *f) { f->tib_u_begin = f->tib_begin; f->tib_u_end = f->tib_u_begin; f->term_echo = 1; + } else { + f->tib_begin = f->tib_end = f->tib_u_begin = f->tib_u_end = 0; } } diff --git a/src/user/lib/libc/std/stdlib.c b/src/user/lib/libc/std/stdlib.c index 15f9ddc..10bce0a 100644 --- a/src/user/lib/libc/std/stdlib.c +++ b/src/user/lib/libc/std/stdlib.c @@ -33,6 +33,7 @@ int atoi(char *s) { while (*s >= '0' && *s <= '9') { r *= 10; r += (*s) - '0'; + s++; }; return r; } diff --git a/src/user/lib/libc/tce/syscall.c b/src/user/lib/libc/tce/syscall.c index f4f1333..780b573 100644 --- a/src/user/lib/libc/tce/syscall.c +++ b/src/user/lib/libc/tce/syscall.c @@ -75,7 +75,7 @@ void brk(void* ptr) { // ********** proc -int run(const char* filename, const char** args, int zero_fd) { +int run(const char* filename, char** args, int zero_fd) { return call(SC_RUN, (unsigned)filename, (unsigned)args, (unsigned)zero_fd, 0, 0); } |