From b0a082015162b20e1a639606c7116c7e956ee0c4 Mon Sep 17 00:00:00 2001 From: "Sergey Semyonov (Serge)" Date: Sat, 6 Dec 2014 08:37:08 +0000 Subject: [PATCH] newlib: perror() && mbstowcs() git-svn-id: svn://kolibrios.org@5220 a494cfbc-eb01-0410-851d-a64ba20cac60 --- contrib/sdk/sources/newlib/libc/Makefile | 4 +- contrib/sdk/sources/newlib/libc/Tupfile.lua | 11 +- .../sdk/sources/newlib/libc/stdio/mbstowcs.c | 83 +++++++++++++++ .../sdk/sources/newlib/libc/stdio/perror.c | 100 ++++++++++++++++++ contrib/sdk/sources/newlib/libc/sys/_rename.c | 3 - .../sdk/sources/newlib/libc/sys/stat.c.bak | 96 ----------------- contrib/sdk/sources/newlib/libc/sys/unlink.c | 2 - 7 files changed, 192 insertions(+), 107 deletions(-) create mode 100644 contrib/sdk/sources/newlib/libc/stdio/mbstowcs.c create mode 100644 contrib/sdk/sources/newlib/libc/stdio/perror.c delete mode 100644 contrib/sdk/sources/newlib/libc/sys/stat.c.bak diff --git a/contrib/sdk/sources/newlib/libc/Makefile b/contrib/sdk/sources/newlib/libc/Makefile index 0b565dff62..aa30e1816b 100644 --- a/contrib/sdk/sources/newlib/libc/Makefile +++ b/contrib/sdk/sources/newlib/libc/Makefile @@ -270,7 +270,10 @@ STDIO_SRCS= \ fwrite.c \ fvwrite.c \ fwalk.c \ + makebuf.c \ + mbstowcs.c \ mktemp.c \ + perror.c \ putc.c \ puts.c \ refill.c \ @@ -291,7 +294,6 @@ STDIO_SRCS= \ vsprintf.c \ vsnprintf.c \ vsscanf.c \ - makebuf.c \ wsetup.c \ wbuf.c \ sccl.c \ diff --git a/contrib/sdk/sources/newlib/libc/Tupfile.lua b/contrib/sdk/sources/newlib/libc/Tupfile.lua index 8c3331dc7f..6d5fd5d05a 100644 --- a/contrib/sdk/sources/newlib/libc/Tupfile.lua +++ b/contrib/sdk/sources/newlib/libc/Tupfile.lua @@ -82,11 +82,12 @@ STDIO_SRCS = { "fileno.c", "findfp.c", "fiprintf.c", "fiscanf.c", "fprintf.c", "fputc.c", "fputs.c", "fputwc.c", "fread.c", "freopen.c", "fscanf.c", "fseek.c", "fseeko.c", "ftell.c", "ftello.c", "fwrite.c", "fvwrite.c", "fwalk.c", - "mktemp.c", "putc.c", "puts.c", "refill.c", "rget.c", "remove.c", "rename.c", - "setvbuf.c", "stdio.c", "tmpfile.c", "tmpnam.c", "ungetc.c", "vasniprintf.c", - "vasnprintf.c", "vdprintf.c", "vdiprintf.c", "vscanf.c", "vsprintf.c", - "vsnprintf.c", "vsscanf.c", "makebuf.c", "wsetup.c", "wbuf.c", "sccl.c", - "siprintf.c", "sniprintf.c", "snprintf.c", "sprintf.c", "sscanf.c" + "makebuf.c", "mbstowcs.c", "mktemp.c", "perror.c", "putc.c", "puts.c", + "refill.c", "rget.c", "remove.c", "rename.c", "setvbuf.c", "stdio.c", + "tmpfile.c", "tmpnam.c", "ungetc.c", "vasniprintf.c", "vasnprintf.c", + "vdprintf.c", "vdiprintf.c", "vscanf.c", "vsprintf.c", "vsnprintf.c", + "vsscanf.c", "wsetup.c", "wbuf.c", "sccl.c", "siprintf.c", "sniprintf.c", + "snprintf.c", "sprintf.c", "sscanf.c" } MATH_SRCS = { diff --git a/contrib/sdk/sources/newlib/libc/stdio/mbstowcs.c b/contrib/sdk/sources/newlib/libc/stdio/mbstowcs.c new file mode 100644 index 0000000000..09543451cf --- /dev/null +++ b/contrib/sdk/sources/newlib/libc/stdio/mbstowcs.c @@ -0,0 +1,83 @@ +/* +FUNCTION +<>---minimal multibyte string to wide char converter + +INDEX + mbstowcs + +ANSI_SYNOPSIS + #include + int mbstowcs(wchar_t *restrict <[pwc]>, const char *restrict <[s]>, size_t <[n]>); + +TRAD_SYNOPSIS + #include + int mbstowcs(<[pwc]>, <[s]>, <[n]>) + wchar_t *<[pwc]>; + const char *<[s]>; + size_t <[n]>; + +DESCRIPTION +When _MB_CAPABLE is not defined, this is a minimal ANSI-conforming +implementation of <>. In this case, the +only ``multi-byte character sequences'' recognized are single bytes, +and they are ``converted'' to wide-char versions simply by byte +extension. + +When _MB_CAPABLE is defined, this routine calls <<_mbstowcs_r>> to perform +the conversion, passing a state variable to allow state dependent +decoding. The result is based on the locale setting which may +be restricted to a defined set of locales. + +RETURNS +This implementation of <> returns <<0>> if +<[s]> is <> or is the empty string; +it returns <<-1>> if _MB_CAPABLE and one of the +multi-byte characters is invalid or incomplete; +otherwise it returns the minimum of: <> or the +number of multi-byte characters in <> plus 1 (to +compensate for the nul character). +If the return value is -1, the state of the <> string is +indeterminate. If the input has a length of 0, the output +string will be modified to contain a wchar_t nul terminator. + +PORTABILITY +<> is required in the ANSI C standard. However, the precise +effects vary with the locale. + +<> requires no supporting OS subroutines. +*/ + +#ifndef _REENT_ONLY + +#include +#include +#include + +size_t +_DEFUN (mbstowcs, (pwcs, s, n), + wchar_t *__restrict pwcs _AND + const char *__restrict s _AND + size_t n) +{ +#ifdef _MB_CAPABLE + mbstate_t state; + state.__count = 0; + + return _mbstowcs_r (_REENT, pwcs, s, n, &state); +#else /* not _MB_CAPABLE */ + + int count = 0; + + if (n != 0) { + do { + if ((*pwcs++ = (wchar_t) *s++) == 0) + break; + count++; + } while (--n != 0); + } + + return count; +#endif /* not _MB_CAPABLE */ +} + +#endif /* !_REENT_ONLY */ diff --git a/contrib/sdk/sources/newlib/libc/stdio/perror.c b/contrib/sdk/sources/newlib/libc/stdio/perror.c new file mode 100644 index 0000000000..14b4d2173b --- /dev/null +++ b/contrib/sdk/sources/newlib/libc/stdio/perror.c @@ -0,0 +1,100 @@ +/* + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +/* +FUNCTION +<>---print an error message on standard error + +INDEX + perror +INDEX + _perror_r + +ANSI_SYNOPSIS + #include + void perror(char *<[prefix]>); + + void _perror_r(struct _reent *<[reent]>, char *<[prefix]>); + +TRAD_SYNOPSIS + #include + void perror(<[prefix]>) + char *<[prefix]>; + + void _perror_r(<[reent]>, <[prefix]>) + struct _reent *<[reent]>; + char *<[prefix]>; + +DESCRIPTION +Use <> to print (on standard error) an error message +corresponding to the current value of the global variable <>. +Unless you use <> as the value of the argument <[prefix]>, the +error message will begin with the string at <[prefix]>, followed by a +colon and a space (<<: >>). The remainder of the error message is one +of the strings described for <>. + +The alternate function <<_perror_r>> is a reentrant version. The +extra argument <[reent]> is a pointer to a reentrancy structure. + +RETURNS +<> returns no result. + +PORTABILITY +ANSI C requires <>, but the strings issued vary from one +implementation to another. + +Supporting OS subroutines required: <>, <>, <>, +<>, <>, <>, <>. +*/ + +#include <_ansi.h> +#include +#include +#include +#include "local.h" + +_VOID +_DEFUN(_perror_r, (ptr, s), + struct _reent *ptr _AND + _CONST char *s) +{ + char *error; + int dummy; + + _REENT_SMALL_CHECK_INIT (ptr); + if (s != NULL && *s != '\0') + { + fputs (s, _stderr_r (ptr)); + fputs (": ", _stderr_r (ptr)); + } + + if ((error = _strerror_r (ptr, ptr->_errno, 1, &dummy)) != NULL) + fputs (error, _stderr_r (ptr)); + + fputc ('\n', _stderr_r (ptr)); +} + +#ifndef _REENT_ONLY + +_VOID +_DEFUN(perror, (s), + _CONST char *s) +{ + _perror_r (_REENT, s); +} + +#endif diff --git a/contrib/sdk/sources/newlib/libc/sys/_rename.c b/contrib/sdk/sources/newlib/libc/sys/_rename.c index 56211d7370..c51e558ad3 100644 --- a/contrib/sdk/sources/newlib/libc/sys/_rename.c +++ b/contrib/sdk/sources/newlib/libc/sys/_rename.c @@ -25,9 +25,6 @@ int _rename (char *from, char *to) int f_to; int size; - printf("%s from %s to %s\n", __FUNCTION__, - from, to); - f_from = open(from,O_RDONLY); if (f_from < 0) diff --git a/contrib/sdk/sources/newlib/libc/sys/stat.c.bak b/contrib/sdk/sources/newlib/libc/sys/stat.c.bak deleted file mode 100644 index 3cf162eb4d..0000000000 --- a/contrib/sdk/sources/newlib/libc/sys/stat.c.bak +++ /dev/null @@ -1,96 +0,0 @@ -/* stat.c -- Get the status of a file. - * - * Copyright (c) 1995 Cygnus Support - * - * The authors hereby grant permission to use, copy, modify, distribute, - * and license this software and its documentation for any purpose, provided - * that existing copyright notices are retained in all copies and that this - * notice is included verbatim in any distributions. No written agreement, - * license, or royalty fee is required for any of the authorized uses. - * Modifications to this software may be copyrighted by their authors - * and need not follow the licensing terms described here, provided that - * the new terms are clearly indicated on the first page of each file where - * they apply. - */ -#include -#include -#include -#include -#include -#include "glue.h" - -/* - * stat -- Since we have no file system, we just return an error. - */ -int -_DEFUN (stat, (path, buf), - const char *path _AND - struct stat *buf) -{ - - fileinfo_t info; - struct tm time; - - printf("%s %s\n", __FUNCTION__, path); - - if( get_fileinfo(path, &info)) - { - errno = ENOENT; - return (-1); - }; - - memset (buf, 0, sizeof (* buf)); - - buf->st_size = info.size; - - if (info.attr & 0x10) - buf->st_mode = S_IFDIR; - else - { - if (info.attr & 0x07) - buf->st_mode = S_IFREG|S_IRUSR|S_IXUSR; - else - buf->st_mode = S_IFREG|S_IRUSR|S_IWUSR|S_IXUSR; - } - - buf->st_blksize = 4096; - - time.tm_sec = info.atime.sec; - time.tm_min = info.atime.min; - time.tm_hour = info.atime.hour; - time.tm_mday = info.adate.day; - time.tm_mon = info.adate.month; - time.tm_year = info.adate.year - 1900; - time.tm_isdst = -1; - buf->st_atime = mktime(&time); - - time.tm_sec = info.ctime.sec; - time.tm_min = info.ctime.min; - time.tm_hour = info.ctime.hour; - time.tm_mday = info.cdate.day; - time.tm_mon = info.cdate.month; - time.tm_year = info.cdate.year - 1900; - time.tm_isdst = -1; - buf->st_ctime = mktime(&time); - - time.tm_sec = info.mtime.sec; - time.tm_min = info.mtime.min; - time.tm_hour = info.mtime.hour; - time.tm_mday = info.mdate.day; - time.tm_mon = info.mdate.month; - time.tm_year = info.mdate.year - 1900; - time.tm_isdst = -1; - buf->st_mtime = mktime(&time); - - return (0); -} - - -int -_DEFUN (lstat, (path, buf), - const char *path _AND - struct stat *buf) -{ - return stat(path, buf); -} - diff --git a/contrib/sdk/sources/newlib/libc/sys/unlink.c b/contrib/sdk/sources/newlib/libc/sys/unlink.c index eea265a30d..e973415e62 100644 --- a/contrib/sdk/sources/newlib/libc/sys/unlink.c +++ b/contrib/sdk/sources/newlib/libc/sys/unlink.c @@ -48,8 +48,6 @@ _DEFUN (unlink, (path), { int err; - printf("%s %s\n", __FUNCTION__, path); - err = delete_file(path); if (!err)