forked from KolibriOS/kolibrios
Newlib:
- Added missing basename.c; - Added original dirname.c; - Added getcwd (extension of POSIX.1 standard, as in the original NewLib). git-svn-id: svn://kolibrios.org@9989 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
64d4ca96c4
commit
aae3ae86cc
@ -116,8 +116,7 @@ CORE_SRCS:= \
|
|||||||
sys/clock_gettime.c \
|
sys/clock_gettime.c \
|
||||||
sys/close.c \
|
sys/close.c \
|
||||||
sys/conio.c \
|
sys/conio.c \
|
||||||
sys/chdir.c \
|
sys/chdir.c \
|
||||||
sys/getcwd.c \
|
|
||||||
sys/errno.c \
|
sys/errno.c \
|
||||||
sys/fstat.c \
|
sys/fstat.c \
|
||||||
sys/gettod.c \
|
sys/gettod.c \
|
||||||
@ -326,8 +325,7 @@ STRING_SRCS= \
|
|||||||
wmemcmp.c \
|
wmemcmp.c \
|
||||||
wmemcpy.c \
|
wmemcpy.c \
|
||||||
wmemmove.c \
|
wmemmove.c \
|
||||||
wmemset.c \
|
wmemset.c
|
||||||
dirname.c
|
|
||||||
|
|
||||||
|
|
||||||
STDIO_SRCS= \
|
STDIO_SRCS= \
|
||||||
@ -517,6 +515,10 @@ POSIX_SRCS = opendir.c \
|
|||||||
telldir.c \
|
telldir.c \
|
||||||
rewinddir.c
|
rewinddir.c
|
||||||
|
|
||||||
|
UNIX_SRCS = basename.c \
|
||||||
|
dirname.c \
|
||||||
|
getcwd.c
|
||||||
|
|
||||||
STATIC_OBJS = $(patsubst %.S, %.o, $(patsubst %.c, %.o, $(STATIC_SRCS)))
|
STATIC_OBJS = $(patsubst %.S, %.o, $(patsubst %.c, %.o, $(STATIC_SRCS)))
|
||||||
|
|
||||||
LIBCRT_OBJS = $(patsubst %.S, %.o, $(patsubst %.c, %.o, $(LIBCRT_SRCS)))
|
LIBCRT_OBJS = $(patsubst %.S, %.o, $(patsubst %.c, %.o, $(LIBCRT_SRCS)))
|
||||||
@ -542,6 +544,8 @@ MATH_OBJS = $(patsubst %.S, math/%.o, $(patsubst %.asm, math/%.o,\
|
|||||||
|
|
||||||
POSIX_OBJS = $(patsubst %.c, posix/%.o, $(POSIX_SRCS))
|
POSIX_OBJS = $(patsubst %.c, posix/%.o, $(POSIX_SRCS))
|
||||||
|
|
||||||
|
UNIX_OBJS = $(patsubst %.c, unix/%.o, $(UNIX_SRCS))
|
||||||
|
|
||||||
PRINTF_OBJS= stdio/vfprintf.o \
|
PRINTF_OBJS= stdio/vfprintf.o \
|
||||||
stdio/vfiprintf.o \
|
stdio/vfiprintf.o \
|
||||||
stdio/svfprintf.o \
|
stdio/svfprintf.o \
|
||||||
@ -574,7 +578,8 @@ LIB_SRCS+= \
|
|||||||
$(STDIO_SRCS) \
|
$(STDIO_SRCS) \
|
||||||
$(STRING_SRCS) \
|
$(STRING_SRCS) \
|
||||||
$(STDLIB_SRCS) \
|
$(STDLIB_SRCS) \
|
||||||
$(POSIX_SRCS)
|
$(POSIX_SRCS) \
|
||||||
|
$(UNIX_SRCS)
|
||||||
|
|
||||||
LIB_OBJS+= \
|
LIB_OBJS+= \
|
||||||
$(CORE_OBJS) \
|
$(CORE_OBJS) \
|
||||||
@ -583,7 +588,8 @@ LIB_OBJS+= \
|
|||||||
$(STDIO_OBJS) \
|
$(STDIO_OBJS) \
|
||||||
$(PRINTF_OBJS) \
|
$(PRINTF_OBJS) \
|
||||||
$(MATH_OBJS) \
|
$(MATH_OBJS) \
|
||||||
$(POSIX_OBJS)
|
$(POSIX_OBJS) \
|
||||||
|
$(UNIX_OBJS)
|
||||||
|
|
||||||
LIB_OBJS+= time/wcsftime.o
|
LIB_OBJS+= time/wcsftime.o
|
||||||
|
|
||||||
|
@ -100,7 +100,6 @@ CORE_SRCS = {
|
|||||||
"sys/close.c",
|
"sys/close.c",
|
||||||
"sys/conio.c",
|
"sys/conio.c",
|
||||||
"sys/chdir.c",
|
"sys/chdir.c",
|
||||||
"sys/getcwd.c",
|
|
||||||
"sys/errno.c",
|
"sys/errno.c",
|
||||||
"sys/fstat.c",
|
"sys/fstat.c",
|
||||||
"sys/gettod.c",
|
"sys/gettod.c",
|
||||||
@ -307,8 +306,7 @@ STRING_SRCS = {
|
|||||||
"wmemcmp.c",
|
"wmemcmp.c",
|
||||||
"wmemcpy.c",
|
"wmemcpy.c",
|
||||||
"wmemmove.c",
|
"wmemmove.c",
|
||||||
"wmemset.c",
|
"wmemset.c"
|
||||||
"dirname.c"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
STDIO_SRCS = {
|
STDIO_SRCS = {
|
||||||
@ -455,6 +453,7 @@ STDIO_SRCS = {
|
|||||||
"wscanf.c",
|
"wscanf.c",
|
||||||
"wsetup.c"
|
"wsetup.c"
|
||||||
}
|
}
|
||||||
|
|
||||||
POSIX_SRCS = {
|
POSIX_SRCS = {
|
||||||
"opendir.c",
|
"opendir.c",
|
||||||
"closedir.c",
|
"closedir.c",
|
||||||
@ -464,6 +463,12 @@ POSIX_SRCS = {
|
|||||||
"rewinddir.c"
|
"rewinddir.c"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UNIX_SRCS = {
|
||||||
|
"getcwd.c",
|
||||||
|
"dirname.c",
|
||||||
|
"basename.c"
|
||||||
|
}
|
||||||
|
|
||||||
MATH_SRCS = {
|
MATH_SRCS = {
|
||||||
"e_acos.c", "e_acosh.c", "e_asin.c", "e_atan2.c", "e_atanh.c", "e_cosh.c", "e_exp.c", "e_fmod.c",
|
"e_acos.c", "e_acosh.c", "e_asin.c", "e_atan2.c", "e_atanh.c", "e_cosh.c", "e_exp.c", "e_fmod.c",
|
||||||
"e_hypot.c", "e_j0.c", "e_j1.c", "e_jn.c", "e_log.c", "e_log10.c", "e_pow.c", "e_rem_pio2.c",
|
"e_hypot.c", "e_j0.c", "e_j1.c", "e_jn.c", "e_log.c", "e_log10.c", "e_pow.c", "e_rem_pio2.c",
|
||||||
@ -516,6 +521,7 @@ LIB_SRCS += prepend("stdio/", STDIO_SRCS)
|
|||||||
LIB_SRCS += prepend("string/", STRING_SRCS)
|
LIB_SRCS += prepend("string/", STRING_SRCS)
|
||||||
LIB_SRCS += prepend("stdlib/", STDLIB_SRCS)
|
LIB_SRCS += prepend("stdlib/", STDLIB_SRCS)
|
||||||
LIB_SRCS += prepend("posix/", POSIX_SRCS)
|
LIB_SRCS += prepend("posix/", POSIX_SRCS)
|
||||||
|
LIB_SRCS += prepend("unix/", UNIX_SRCS)
|
||||||
LIB_SRCS += prepend("math/", MATH_SRCS)
|
LIB_SRCS += prepend("math/", MATH_SRCS)
|
||||||
|
|
||||||
ALL_OBJS = {}
|
ALL_OBJS = {}
|
||||||
|
@ -1,67 +0,0 @@
|
|||||||
/* dirname - return directory part of PATH.
|
|
||||||
Copyright (C) 1996-2019 Free Software Foundation, Inc.
|
|
||||||
This file is part of the GNU C Library.
|
|
||||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with the GNU C Library; if not, see
|
|
||||||
<http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
#include <libgen.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
char *
|
|
||||||
dirname (char *path)
|
|
||||||
{
|
|
||||||
static const char dot[] = ".";
|
|
||||||
char *last_slash;
|
|
||||||
/* Find last '/'. */
|
|
||||||
last_slash = path != NULL ? strrchr (path, '/') : NULL;
|
|
||||||
if (last_slash != NULL && last_slash != path && last_slash[1] == '\0')
|
|
||||||
{
|
|
||||||
/* Determine whether all remaining characters are slashes. */
|
|
||||||
char *runp;
|
|
||||||
for (runp = last_slash; runp != path; --runp)
|
|
||||||
if (runp[-1] != '/')
|
|
||||||
break;
|
|
||||||
/* The '/' is the last character, we have to look further. */
|
|
||||||
if (runp != path)
|
|
||||||
last_slash = memrchr (path, '/', runp - path);
|
|
||||||
}
|
|
||||||
if (last_slash != NULL)
|
|
||||||
{
|
|
||||||
/* Determine whether all remaining characters are slashes. */
|
|
||||||
char *runp;
|
|
||||||
for (runp = last_slash; runp != path; --runp)
|
|
||||||
if (runp[-1] != '/')
|
|
||||||
break;
|
|
||||||
/* Terminate the path. */
|
|
||||||
if (runp == path)
|
|
||||||
{
|
|
||||||
/* The last slash is the first character in the string. We have to
|
|
||||||
return "/". As a special case we have to return "//" if there
|
|
||||||
are exactly two slashes at the beginning of the string. See
|
|
||||||
XBD 4.10 Path Name Resolution for more information. */
|
|
||||||
if (last_slash == path + 1)
|
|
||||||
++last_slash;
|
|
||||||
else
|
|
||||||
last_slash = path + 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
last_slash = runp;
|
|
||||||
last_slash[0] = '\0';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
/* This assignment is ill-designed but the XPG specs require to
|
|
||||||
return a string containing "." in any case no directory part is
|
|
||||||
found and so a static and constant string is required. */
|
|
||||||
path = (char *) dot;
|
|
||||||
return path;
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) KolibriOS team 2004-2024. All rights reserved.
|
|
||||||
* Distributed under terms of the GNU General Public License
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/ksys.h>
|
|
||||||
|
|
||||||
char *getcwd(char *buf, unsigned size){
|
|
||||||
if(!buf){
|
|
||||||
if((buf = malloc(size))==NULL){
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ksys_getcwd(buf, size);
|
|
||||||
return(buf);
|
|
||||||
}
|
|
28
contrib/sdk/sources/newlib/libc/unix/basename.c
Normal file
28
contrib/sdk/sources/newlib/libc/unix/basename.c
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#ifndef _NO_BASENAME
|
||||||
|
/* Copyright 2005 Shaun Jackman
|
||||||
|
* Permission to use, copy, modify, and distribute this software
|
||||||
|
* is freely granted, provided that this notice is preserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <libgen.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
char*
|
||||||
|
_DEFUN (basename, (path),
|
||||||
|
char *path)
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
if( path == NULL || *path == '\0' )
|
||||||
|
return ".";
|
||||||
|
p = path + strlen(path) - 1;
|
||||||
|
while( *p == '/' ) {
|
||||||
|
if( p == path )
|
||||||
|
return path;
|
||||||
|
*p-- = '\0';
|
||||||
|
}
|
||||||
|
while( p >= path && *p != '/' )
|
||||||
|
p--;
|
||||||
|
return p + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* !_NO_BASENAME */
|
32
contrib/sdk/sources/newlib/libc/unix/dirname.c
Normal file
32
contrib/sdk/sources/newlib/libc/unix/dirname.c
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#ifndef _NO_DIRNAME
|
||||||
|
|
||||||
|
/* Copyright 2005 Shaun Jackman
|
||||||
|
* Permission to use, copy, modify, and distribute this software
|
||||||
|
* is freely granted, provided that this notice is preserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <libgen.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
char *
|
||||||
|
_DEFUN (dirname, (path),
|
||||||
|
char *path)
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
if( path == NULL || *path == '\0' )
|
||||||
|
return ".";
|
||||||
|
p = path + strlen(path) - 1;
|
||||||
|
while( *p == '/' ) {
|
||||||
|
if( p == path )
|
||||||
|
return path;
|
||||||
|
*p-- = '\0';
|
||||||
|
}
|
||||||
|
while( p >= path && *p != '/' )
|
||||||
|
p--;
|
||||||
|
return
|
||||||
|
p < path ? "." :
|
||||||
|
p == path ? "/" :
|
||||||
|
(*p = '\0', path);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* !_NO_DIRNAME */
|
53
contrib/sdk/sources/newlib/libc/unix/getcwd.c
Normal file
53
contrib/sdk/sources/newlib/libc/unix/getcwd.c
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#ifndef _NO_GETCWD
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) KolibriOS team 2024. All rights reserved.
|
||||||
|
* Distributed under terms of the GNU General Public License
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
#include <sys/errno.h>
|
||||||
|
#include <sys/unistd.h>
|
||||||
|
#include <sys/ksys.h>
|
||||||
|
|
||||||
|
#ifndef _REENT_ONLY
|
||||||
|
|
||||||
|
char *
|
||||||
|
_DEFUN (getcwd, (buf, size),
|
||||||
|
char *buf _AND
|
||||||
|
size_t size)
|
||||||
|
{
|
||||||
|
if (buf != NULL && size == 0)
|
||||||
|
{
|
||||||
|
errno = EINVAL;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buf == NULL)
|
||||||
|
{
|
||||||
|
if (size == 0)
|
||||||
|
size = PATH_MAX;
|
||||||
|
|
||||||
|
buf = malloc(size);
|
||||||
|
if (buf == NULL)
|
||||||
|
{
|
||||||
|
errno = ENOMEM;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_ksys_getcwd(buf, size);
|
||||||
|
|
||||||
|
if (access(buf, R_OK) == -1)
|
||||||
|
{
|
||||||
|
errno = EACCES;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _REENT_ONLY */
|
||||||
|
#endif /* !_NO_GETCWD */
|
Loading…
Reference in New Issue
Block a user