diff options
author | Gwenolé Beauchesne <gbeauchesne@mandriva.org> | 2003-06-04 18:44:09 +0000 |
---|---|---|
committer | Gwenolé Beauchesne <gbeauchesne@mandriva.org> | 2003-06-04 18:44:09 +0000 |
commit | 4cd6a4a5d7e49d54d53dcf4a6f3393d50bd88e8b (patch) | |
tree | acd4001a266a8713495af7f1b2102b61e67113b0 /mdk-stage1/dietlibc/libstdio | |
parent | 71b111ec6c4671667a19c6fbe0023d33422535d7 (diff) | |
download | drakx-4cd6a4a5d7e49d54d53dcf4a6f3393d50bd88e8b.tar drakx-4cd6a4a5d7e49d54d53dcf4a6f3393d50bd88e8b.tar.gz drakx-4cd6a4a5d7e49d54d53dcf4a6f3393d50bd88e8b.tar.bz2 drakx-4cd6a4a5d7e49d54d53dcf4a6f3393d50bd88e8b.tar.xz drakx-4cd6a4a5d7e49d54d53dcf4a6f3393d50bd88e8b.zip |
Import dietlibc 0.22 + other fixes for AMD64
Diffstat (limited to 'mdk-stage1/dietlibc/libstdio')
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/fdglue2.c | 43 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/fdprintf.c | 13 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/fgetc_unlocked.c | 30 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/fgetpos.c | 8 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/fputc_unlocked.c | 20 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/fscanf.c | 14 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/fseeko.c | 10 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/fseeko64.c | 12 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/fsetpos.c | 7 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/ftello.c | 7 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/ftello64.c | 9 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/puts.c | 16 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/scanf.c | 14 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/tmpfile.c | 12 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/vfdprintf.c | 15 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/vfprintf.c | 15 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/vfscanf.c | 11 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/vprintf.c | 15 | ||||
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/vscanf.c | 10 |
19 files changed, 281 insertions, 0 deletions
diff --git a/mdk-stage1/dietlibc/libstdio/fdglue2.c b/mdk-stage1/dietlibc/libstdio/fdglue2.c new file mode 100644 index 000000000..b96e4c5b8 --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/fdglue2.c @@ -0,0 +1,43 @@ +#include <unistd.h> +#include <fcntl.h> +#include <sys/stat.h> +#include <errno.h> +#include "dietstdio.h" +#include <stdlib.h> +#include <pthread.h> + +extern int __stdio_atexit; + +FILE* __stdio_init_file_nothreads(int fd,int closeonerror); +FILE* __stdio_init_file_nothreads(int fd,int closeonerror) { + FILE *tmp=(FILE*)malloc(sizeof(FILE)); + if (!tmp) goto err_out; + tmp->buf=(char*)malloc(BUFSIZE); + if (!tmp->buf) { + free(tmp); +err_out: + if (closeonerror) close(fd); + errno=ENOMEM; + return 0; + } + tmp->fd=fd; + tmp->bm=0; + tmp->bs=0; + tmp->buflen=BUFSIZE; + { + struct stat st; + fstat(fd,&st); + tmp->flags=(S_ISFIFO(st.st_mode))?FDPIPE:0; + } + tmp->popen_kludge=0; + if (__stdio_atexit==0) { + __stdio_atexit=1; + atexit(__stdio_flushall); + } + tmp->next=__stdio_root; + __stdio_root=tmp; + tmp->ungotten=0; + return tmp; +} + +FILE* __stdio_init_file(int fd,int closeonerror) __attribute__((weak,alias("__stdio_init_file_nothreads"))); diff --git a/mdk-stage1/dietlibc/libstdio/fdprintf.c b/mdk-stage1/dietlibc/libstdio/fdprintf.c new file mode 100644 index 000000000..f9fc7a3b4 --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/fdprintf.c @@ -0,0 +1,13 @@ +#include <stdarg.h> +#include <sys/types.h> +#include <stdio.h> +#include <stdlib.h> + +int fdprintf(int fd,const char *format,...) { + int n; + va_list arg_ptr; + va_start(arg_ptr,format); + n=vfdprintf(fd,format,arg_ptr); + va_end(arg_ptr); + return n; +} diff --git a/mdk-stage1/dietlibc/libstdio/fgetc_unlocked.c b/mdk-stage1/dietlibc/libstdio/fgetc_unlocked.c new file mode 100644 index 000000000..5136c8df1 --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/fgetc_unlocked.c @@ -0,0 +1,30 @@ +#include "dietstdio.h" +#include <unistd.h> + +int fgetc_unlocked(FILE *stream) { + unsigned char c; + if (stream->ungotten) { + stream->ungotten=0; + return stream->ungetbuf; + } + if (feof(stream)) + return EOF; + if (__fflush4(stream,BUFINPUT)) return EOF; + if (stream->bm>=stream->bs) { + int len=read(stream->fd,stream->buf,stream->buflen); + if (len==0) { + stream->flags|=EOFINDICATOR; + return EOF; + } else if (len<0) { + stream->flags|=ERRORINDICATOR; + return EOF; + } + stream->bm=0; + stream->bs=len; + } + c=stream->buf[stream->bm]; + ++stream->bm; + return c; +} + +int fgetc(FILE* stream) __attribute__((weak,alias("fgetc_unlocked"))); diff --git a/mdk-stage1/dietlibc/libstdio/fgetpos.c b/mdk-stage1/dietlibc/libstdio/fgetpos.c new file mode 100644 index 000000000..d58b6fa5b --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/fgetpos.c @@ -0,0 +1,8 @@ +#include <stdio.h> + +int fgetpos(FILE *stream, fpos_t *pos) { + long l=ftell(stream); + if (l==-1) return -1; + *pos=l; + return 0; +} diff --git a/mdk-stage1/dietlibc/libstdio/fputc_unlocked.c b/mdk-stage1/dietlibc/libstdio/fputc_unlocked.c new file mode 100644 index 000000000..6441c5741 --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/fputc_unlocked.c @@ -0,0 +1,20 @@ +#include <dietstdio.h> +#include <unistd.h> + +int fputc_unlocked(int c, FILE *stream) { + if (__fflush4(stream,0)) return EOF; + if (stream->bm>=stream->buflen-1) + if (fflush(stream)) return EOF; + if (stream->flags&NOBUF) { + if (write(stream->fd,&c,1) != 1) return EOF; + return 0; + } + stream->buf[stream->bm]=c; + ++stream->bm; + if (((stream->flags&BUFLINEWISE) && c=='\n') || + ((stream->flags&NOBUF))) /* puke */ + if (fflush(stream)) return EOF; + return 0; +} + +int fputc(int c,FILE* stream) __attribute__((weak,alias("fputc_unlocked"))); diff --git a/mdk-stage1/dietlibc/libstdio/fscanf.c b/mdk-stage1/dietlibc/libstdio/fscanf.c new file mode 100644 index 000000000..07f477462 --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/fscanf.c @@ -0,0 +1,14 @@ +#include <stdarg.h> +#include <sys/types.h> +#include <stdlib.h> +#include "dietstdio.h" +#include <unistd.h> + +int fscanf(FILE *stream, const char *format, ...) { + int n; + va_list arg_ptr; + va_start(arg_ptr, format); + n=vfscanf(stream,format,arg_ptr); + va_end (arg_ptr); + return n; +} diff --git a/mdk-stage1/dietlibc/libstdio/fseeko.c b/mdk-stage1/dietlibc/libstdio/fseeko.c new file mode 100644 index 000000000..6459a6ff4 --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/fseeko.c @@ -0,0 +1,10 @@ +#include <dietstdio.h> +#include <unistd.h> + +int fseeko(FILE *stream, off_t offset, int whence) { + fflush(stream); + stream->bm=0; stream->bs=0; + stream->flags&=~(ERRORINDICATOR|EOFINDICATOR); + stream->ungotten=0; + return lseek(stream->fd,offset,whence)!=-1?0:-1; +} diff --git a/mdk-stage1/dietlibc/libstdio/fseeko64.c b/mdk-stage1/dietlibc/libstdio/fseeko64.c new file mode 100644 index 000000000..3b00596a1 --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/fseeko64.c @@ -0,0 +1,12 @@ +#include <dietstdio.h> +#include <unistd.h> + +#ifndef __NO_STAT64 +int fseeko64(FILE *stream, off64_t offset, int whence) { + fflush(stream); + stream->bm=0; stream->bs=0; + stream->flags&=~(ERRORINDICATOR|EOFINDICATOR); + stream->ungotten=0; + return lseek64(stream->fd,offset,whence)!=-1?0:-1; +} +#endif diff --git a/mdk-stage1/dietlibc/libstdio/fsetpos.c b/mdk-stage1/dietlibc/libstdio/fsetpos.c new file mode 100644 index 000000000..336135fff --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/fsetpos.c @@ -0,0 +1,7 @@ +#include <stdio.h> + +int fsetpos(FILE *stream, fpos_t *pos) { + if (fseek(stream,*pos,SEEK_SET)==-1) + return -1; + return 0; +} diff --git a/mdk-stage1/dietlibc/libstdio/ftello.c b/mdk-stage1/dietlibc/libstdio/ftello.c new file mode 100644 index 000000000..9d36318e2 --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/ftello.c @@ -0,0 +1,7 @@ +#include <dietstdio.h> +#include <unistd.h> + +off_t ftello(FILE *stream) { + fflush(stream); + return (lseek(stream->fd,0,SEEK_CUR)); +} diff --git a/mdk-stage1/dietlibc/libstdio/ftello64.c b/mdk-stage1/dietlibc/libstdio/ftello64.c new file mode 100644 index 000000000..bda7a7de4 --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/ftello64.c @@ -0,0 +1,9 @@ +#include <dietstdio.h> +#include <unistd.h> + +#ifndef __NO_STAT64 +off64_t ftello64(FILE *stream) { + fflush(stream); + return (lseek64(stream->fd,0ull,SEEK_CUR)); +} +#endif diff --git a/mdk-stage1/dietlibc/libstdio/puts.c b/mdk-stage1/dietlibc/libstdio/puts.c new file mode 100644 index 000000000..b1da01f9d --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/puts.c @@ -0,0 +1,16 @@ +#include <unistd.h> +#include <string.h> +#include "dietstdio.h" +#include "dietfeatures.h" + +int __cheap_outs(const char *s,size_t len); +int __cheap_outs(const char *s,size_t len) { + return (size_t)write(1,s,len)==len?1:0; +} + +int __stdio_outs(const char *s,size_t len) __attribute__((weak,alias("__cheap_outs"))); + +int puts(const char *s) { + return (__stdio_outs(s,strlen(s)) && __stdio_outs("\n",1))?0:-1; +} + diff --git a/mdk-stage1/dietlibc/libstdio/scanf.c b/mdk-stage1/dietlibc/libstdio/scanf.c new file mode 100644 index 000000000..589c19f41 --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/scanf.c @@ -0,0 +1,14 @@ +#include <stdarg.h> +#include <sys/types.h> +#include <stdlib.h> +#include "dietstdio.h" +#include <unistd.h> + +int scanf(const char *format, ...) { + int n; + va_list arg_ptr; + va_start(arg_ptr, format); + n=vfscanf(stdin,format,arg_ptr); + va_end (arg_ptr); + return n; +} diff --git a/mdk-stage1/dietlibc/libstdio/tmpfile.c b/mdk-stage1/dietlibc/libstdio/tmpfile.c new file mode 100644 index 000000000..b20d8410d --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/tmpfile.c @@ -0,0 +1,12 @@ +#include "dietstdio.h" +#include <stdlib.h> +#include <unistd.h> + +FILE *tmpfile (void) { + int fd; + char template[20] = "/tmp/tmpfile-XXXXXX"; + if ((fd=mkstemp(template))<0) + return 0; + unlink(template); + return __stdio_init_file(fd,1); +} diff --git a/mdk-stage1/dietlibc/libstdio/vfdprintf.c b/mdk-stage1/dietlibc/libstdio/vfdprintf.c new file mode 100644 index 000000000..fdfeb09e1 --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/vfdprintf.c @@ -0,0 +1,15 @@ +#include <stdarg.h> +#include <sys/types.h> +#include <unistd.h> +#include <stdlib.h> +#include "dietstdio.h" + +static int __fwrite(void*ptr, size_t nmemb, int fd) { + return write(fd,ptr,nmemb); +} + +int vfdprintf(int fd, const char *format, va_list arg_ptr) +{ + struct arg_printf ap = { (void*)(long)fd, (int(*)(void*,size_t,void*)) __fwrite }; + return __v_printf(&ap,format,arg_ptr); +} diff --git a/mdk-stage1/dietlibc/libstdio/vfprintf.c b/mdk-stage1/dietlibc/libstdio/vfprintf.c new file mode 100644 index 000000000..5e64cf099 --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/vfprintf.c @@ -0,0 +1,15 @@ +#include <stdarg.h> +#include <sys/types.h> +#include <unistd.h> +#include <stdlib.h> +#include "dietstdio.h" + +static int __fwrite(void*ptr, size_t nmemb, FILE* f) { + return fwrite(ptr,1,nmemb,f); +} + +int vfprintf(FILE *stream, const char *format, va_list arg_ptr) +{ + struct arg_printf ap = { stream, (int(*)(void*,size_t,void*)) __fwrite }; + return __v_printf(&ap,format,arg_ptr); +} diff --git a/mdk-stage1/dietlibc/libstdio/vfscanf.c b/mdk-stage1/dietlibc/libstdio/vfscanf.c new file mode 100644 index 000000000..6d75a45ac --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/vfscanf.c @@ -0,0 +1,11 @@ +#include <stdarg.h> +#include <sys/types.h> +#include <stdlib.h> +#include "dietstdio.h" +#include <unistd.h> + +int vfscanf(FILE *stream, const char *format, va_list arg_ptr) +{ + struct arg_scanf farg = { (void*)stream, (int(*)(void*))fgetc, (int(*)(int,void*))ungetc }; + return __v_scanf(&farg,format,arg_ptr); +} diff --git a/mdk-stage1/dietlibc/libstdio/vprintf.c b/mdk-stage1/dietlibc/libstdio/vprintf.c new file mode 100644 index 000000000..7fe579e0a --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/vprintf.c @@ -0,0 +1,15 @@ +#include <stdarg.h> +#include <unistd.h> +#include "dietstdio.h" + +int __stdio_outs(const char *s,size_t len) __attribute__((weak)); +int __stdio_outs(const char *s,size_t len) { + return (write(1,s,len)==(int)len)?1:0; +} + +int vprintf(const char *format, va_list ap) +{ + struct arg_printf _ap = { 0, (int(*)(void*,size_t,void*)) __stdio_outs }; + return __v_printf(&_ap,format,ap); +} + diff --git a/mdk-stage1/dietlibc/libstdio/vscanf.c b/mdk-stage1/dietlibc/libstdio/vscanf.c new file mode 100644 index 000000000..ba9358fc4 --- /dev/null +++ b/mdk-stage1/dietlibc/libstdio/vscanf.c @@ -0,0 +1,10 @@ +#include <stdarg.h> +#include <sys/types.h> +#include <stdlib.h> +#include "dietstdio.h" +#include <unistd.h> + +int vscanf(const char *format, va_list arg_ptr) +{ + return vfscanf(stdin,format,arg_ptr); +} |