forked from KolibriOS/kolibrios
newlib: perror() && mbstowcs()
git-svn-id: svn://kolibrios.org@5220 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
3e62747fb5
commit
b0a0820151
@ -270,7 +270,10 @@ STDIO_SRCS= \
|
|||||||
fwrite.c \
|
fwrite.c \
|
||||||
fvwrite.c \
|
fvwrite.c \
|
||||||
fwalk.c \
|
fwalk.c \
|
||||||
|
makebuf.c \
|
||||||
|
mbstowcs.c \
|
||||||
mktemp.c \
|
mktemp.c \
|
||||||
|
perror.c \
|
||||||
putc.c \
|
putc.c \
|
||||||
puts.c \
|
puts.c \
|
||||||
refill.c \
|
refill.c \
|
||||||
@ -291,7 +294,6 @@ STDIO_SRCS= \
|
|||||||
vsprintf.c \
|
vsprintf.c \
|
||||||
vsnprintf.c \
|
vsnprintf.c \
|
||||||
vsscanf.c \
|
vsscanf.c \
|
||||||
makebuf.c \
|
|
||||||
wsetup.c \
|
wsetup.c \
|
||||||
wbuf.c \
|
wbuf.c \
|
||||||
sccl.c \
|
sccl.c \
|
||||||
|
@ -82,11 +82,12 @@ STDIO_SRCS = {
|
|||||||
"fileno.c", "findfp.c", "fiprintf.c", "fiscanf.c", "fprintf.c", "fputc.c",
|
"fileno.c", "findfp.c", "fiprintf.c", "fiscanf.c", "fprintf.c", "fputc.c",
|
||||||
"fputs.c", "fputwc.c", "fread.c", "freopen.c", "fscanf.c", "fseek.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",
|
"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",
|
"makebuf.c", "mbstowcs.c", "mktemp.c", "perror.c", "putc.c", "puts.c",
|
||||||
"setvbuf.c", "stdio.c", "tmpfile.c", "tmpnam.c", "ungetc.c", "vasniprintf.c",
|
"refill.c", "rget.c", "remove.c", "rename.c", "setvbuf.c", "stdio.c",
|
||||||
"vasnprintf.c", "vdprintf.c", "vdiprintf.c", "vscanf.c", "vsprintf.c",
|
"tmpfile.c", "tmpnam.c", "ungetc.c", "vasniprintf.c", "vasnprintf.c",
|
||||||
"vsnprintf.c", "vsscanf.c", "makebuf.c", "wsetup.c", "wbuf.c", "sccl.c",
|
"vdprintf.c", "vdiprintf.c", "vscanf.c", "vsprintf.c", "vsnprintf.c",
|
||||||
"siprintf.c", "sniprintf.c", "snprintf.c", "sprintf.c", "sscanf.c"
|
"vsscanf.c", "wsetup.c", "wbuf.c", "sccl.c", "siprintf.c", "sniprintf.c",
|
||||||
|
"snprintf.c", "sprintf.c", "sscanf.c"
|
||||||
}
|
}
|
||||||
|
|
||||||
MATH_SRCS = {
|
MATH_SRCS = {
|
||||||
|
83
contrib/sdk/sources/newlib/libc/stdio/mbstowcs.c
Normal file
83
contrib/sdk/sources/newlib/libc/stdio/mbstowcs.c
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
FUNCTION
|
||||||
|
<<mbstowcs>>---minimal multibyte string to wide char converter
|
||||||
|
|
||||||
|
INDEX
|
||||||
|
mbstowcs
|
||||||
|
|
||||||
|
ANSI_SYNOPSIS
|
||||||
|
#include <stdlib.h>
|
||||||
|
int mbstowcs(wchar_t *restrict <[pwc]>, const char *restrict <[s]>, size_t <[n]>);
|
||||||
|
|
||||||
|
TRAD_SYNOPSIS
|
||||||
|
#include <stdlib.h>
|
||||||
|
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 <<mbstowcs>>. 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 <<mbstowcs>> returns <<0>> if
|
||||||
|
<[s]> is <<NULL>> 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: <<n>> or the
|
||||||
|
number of multi-byte characters in <<s>> plus 1 (to
|
||||||
|
compensate for the nul character).
|
||||||
|
If the return value is -1, the state of the <<pwc>> 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
|
||||||
|
<<mbstowcs>> is required in the ANSI C standard. However, the precise
|
||||||
|
effects vary with the locale.
|
||||||
|
|
||||||
|
<<mbstowcs>> requires no supporting OS subroutines.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _REENT_ONLY
|
||||||
|
|
||||||
|
#include <newlib.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
|
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 */
|
100
contrib/sdk/sources/newlib/libc/stdio/perror.c
Normal file
100
contrib/sdk/sources/newlib/libc/stdio/perror.c
Normal file
@ -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
|
||||||
|
<<perror>>---print an error message on standard error
|
||||||
|
|
||||||
|
INDEX
|
||||||
|
perror
|
||||||
|
INDEX
|
||||||
|
_perror_r
|
||||||
|
|
||||||
|
ANSI_SYNOPSIS
|
||||||
|
#include <stdio.h>
|
||||||
|
void perror(char *<[prefix]>);
|
||||||
|
|
||||||
|
void _perror_r(struct _reent *<[reent]>, char *<[prefix]>);
|
||||||
|
|
||||||
|
TRAD_SYNOPSIS
|
||||||
|
#include <stdio.h>
|
||||||
|
void perror(<[prefix]>)
|
||||||
|
char *<[prefix]>;
|
||||||
|
|
||||||
|
void _perror_r(<[reent]>, <[prefix]>)
|
||||||
|
struct _reent *<[reent]>;
|
||||||
|
char *<[prefix]>;
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
Use <<perror>> to print (on standard error) an error message
|
||||||
|
corresponding to the current value of the global variable <<errno>>.
|
||||||
|
Unless you use <<NULL>> 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 <<strerror>>.
|
||||||
|
|
||||||
|
The alternate function <<_perror_r>> is a reentrant version. The
|
||||||
|
extra argument <[reent]> is a pointer to a reentrancy structure.
|
||||||
|
|
||||||
|
RETURNS
|
||||||
|
<<perror>> returns no result.
|
||||||
|
|
||||||
|
PORTABILITY
|
||||||
|
ANSI C requires <<perror>>, but the strings issued vary from one
|
||||||
|
implementation to another.
|
||||||
|
|
||||||
|
Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>,
|
||||||
|
<<lseek>>, <<read>>, <<sbrk>>, <<write>>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <_ansi.h>
|
||||||
|
#include <reent.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#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
|
@ -25,9 +25,6 @@ int _rename (char *from, char *to)
|
|||||||
int f_to;
|
int f_to;
|
||||||
int size;
|
int size;
|
||||||
|
|
||||||
printf("%s from %s to %s\n", __FUNCTION__,
|
|
||||||
from, to);
|
|
||||||
|
|
||||||
f_from = open(from,O_RDONLY);
|
f_from = open(from,O_RDONLY);
|
||||||
|
|
||||||
if (f_from < 0)
|
if (f_from < 0)
|
||||||
|
@ -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 <sys/stat.h>
|
|
||||||
#include <sys/kos_io.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <string.h>
|
|
||||||
#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);
|
|
||||||
}
|
|
||||||
|
|
@ -48,8 +48,6 @@ _DEFUN (unlink, (path),
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
printf("%s %s\n", __FUNCTION__, path);
|
|
||||||
|
|
||||||
err = delete_file(path);
|
err = delete_file(path);
|
||||||
|
|
||||||
if (!err)
|
if (!err)
|
||||||
|
Loading…
Reference in New Issue
Block a user