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 \
|
||||
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 \
|
||||
|
@ -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 = {
|
||||
|
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 size;
|
||||
|
||||
printf("%s from %s to %s\n", __FUNCTION__,
|
||||
from, to);
|
||||
|
||||
f_from = open(from,O_RDONLY);
|
||||
|
||||
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;
|
||||
|
||||
printf("%s %s\n", __FUNCTION__, path);
|
||||
|
||||
err = delete_file(path);
|
||||
|
||||
if (!err)
|
||||
|
Loading…
Reference in New Issue
Block a user