diff --git a/library/GNUmakefile.68k b/library/GNUmakefile.68k index 5258971..0448984 100644 --- a/library/GNUmakefile.68k +++ b/library/GNUmakefile.68k @@ -1,5 +1,5 @@ # -# $Id: GNUmakefile.68k,v 1.86 2006-07-28 13:19:11 obarthel Exp $ +# $Id: GNUmakefile.68k,v 1.87 2006-07-28 13:36:16 obarthel Exp $ # # :ts=8 # @@ -423,6 +423,7 @@ C_LIB = \ time_weekday.o \ uio_readv.o \ uio_writev.o \ + ulimit_ulimit.o \ unistd_access.o \ unistd_chdir.o \ unistd_chdir_exit.o \ @@ -470,6 +471,8 @@ UNIX_LIB = \ getopt_getopt_long.o \ mount_convertinfo.o \ mount_statfs.o \ + resource_getrlimit.o \ + resource_setrlimit.o \ stat_chmod.o \ stat_fstat.o \ stat_lstat.o \ diff --git a/library/GNUmakefile.os4 b/library/GNUmakefile.os4 index e9cff08..f3ed335 100644 --- a/library/GNUmakefile.os4 +++ b/library/GNUmakefile.os4 @@ -1,5 +1,5 @@ # -# $Id: GNUmakefile.os4,v 1.99 2006-07-28 13:19:11 obarthel Exp $ +# $Id: GNUmakefile.os4,v 1.100 2006-07-28 13:36:16 obarthel Exp $ # # :ts=8 # @@ -463,6 +463,7 @@ C_LIB = \ time_weekday.o \ uio_readv.o \ uio_writev.o \ + ulimit_ulimit.o \ unistd_access.o \ unistd_chdir.o \ unistd_chdir_exit.o \ @@ -512,6 +513,8 @@ UNIX_LIB = \ getopt_getopt_long.o \ mount_convertinfo.o \ mount_statfs.o \ + resource_getrlimit.o \ + resource_setrlimit.o \ stat_chmod.o \ stat_fstat.o \ stat_lstat.o \ diff --git a/library/changes b/library/changes index 3250113..a51af78 100644 --- a/library/changes +++ b/library/changes @@ -1,4 +1,5 @@ -- Added ftime(), as contributed by Peter Bengtsson. Thank you very much! +- Added ftime(), ulimit(), getrlimit() and setrlimit() as contributed by + Peter Bengtsson. Thank you very much! - Added the missing S_ISSOCKET() macro to . Note that this is not actually a POSIX feature. diff --git a/library/include/sys/resource.h b/library/include/sys/resource.h new file mode 100644 index 0000000..cf72c25 --- /dev/null +++ b/library/include/sys/resource.h @@ -0,0 +1,87 @@ +/* + * $Id: resource.h,v 1.1 2006-07-28 13:36:17 obarthel Exp $ + * + * :ts=4 + * + * Portable ISO 'C' (1994) runtime library for the Amiga computer + * Copyright (c) 2002-2006 by Olaf Barthel + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Neither the name of Olaf Barthel nor the names of contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ***************************************************************************** + * + * Documentation and source code for this library, and the most recent library + * build are available from . + * + ***************************************************************************** + */ + +#ifndef _SYS_RESOURCE_H +#define _SYS_RESOURCE_H + +/****************************************************************************/ + +#ifndef _SYS_TYPES_H +#include /* For the definition of rlim_t */ +#endif /* _SYS_TYPES_H */ + +/****************************************************************************/ + +/* The following is not part of the ISO 'C' (1994) standard. */ + +/****************************************************************************/ + +#define RLIM_INFINITY 0xffffffffUL +#define RLIM_SAVED_MAX (RLIM_INFINITY-1) +#define RLIM_SAVED_CUR (RLIM_INFINITY-2) + +/****************************************************************************/ + +#define RLIM_VMEM 1 +#define RLIM_AS RLIM_VMEM +#define RLIM_CORE 2 +#define RLIM_CPU 3 +#define RLIM_DATA 4 +#define RLIM_FSIZE 5 +#define RLIM_NOFILE 6 +#define RLIM_OFILE RLIMIT_NOFILE +#define RLIM_STACK 7 + +/****************************************************************************/ + +struct rlimit +{ + rlim_t rlim_cur; + rlim_t rlim_max; +}; + +/****************************************************************************/ + +extern int getrlimit(int resource,struct rlimit *rlp); +extern int setrlimit(int resource,const struct rlimit *rlp); + +/****************************************************************************/ + +#endif /* _SYS_RESOURCE_H */ diff --git a/library/include/sys/timeb.h b/library/include/sys/timeb.h index 250ca75..4208b15 100644 --- a/library/include/sys/timeb.h +++ b/library/include/sys/timeb.h @@ -1,5 +1,5 @@ /* - * $Id: timeb.h,v 1.1 2006-07-28 13:19:12 obarthel Exp $ + * $Id: timeb.h,v 1.2 2006-07-28 13:36:17 obarthel Exp $ * * :ts=4 * @@ -49,6 +49,10 @@ /****************************************************************************/ +/* The following is not part of the ISO 'C' (1994) standard. */ + +/****************************************************************************/ + struct timeb { time_t time; diff --git a/library/include/ulimit.h b/library/include/ulimit.h new file mode 100644 index 0000000..bcebc8d --- /dev/null +++ b/library/include/ulimit.h @@ -0,0 +1,57 @@ +/* + * $Id: ulimit.h,v 1.1 2006-07-28 13:36:17 obarthel Exp $ + * + * :ts=4 + * + * Portable ISO 'C' (1994) runtime library for the Amiga computer + * Copyright (c) 2002-2006 by Olaf Barthel + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Neither the name of Olaf Barthel nor the names of contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ***************************************************************************** + * + * Documentation and source code for this library, and the most recent library + * build are available from . + * + ***************************************************************************** + */ + +#ifndef _ULIMIT_H +#define _ULIMIT_H + +/****************************************************************************/ + +#define UL_GETFSIZE 1 +#define UL_SETFSIZE 2 +#define UL_GMEMLIM 3 +#define UL_GDESLIM 4 + +/****************************************************************************/ + +extern long ulimit(int cmd,long newlimit); + +/****************************************************************************/ + +#endif /* _ULIMIT_H */ diff --git a/library/resource_getrlimit.c b/library/resource_getrlimit.c new file mode 100644 index 0000000..f3093ad --- /dev/null +++ b/library/resource_getrlimit.c @@ -0,0 +1,127 @@ +/* + * $Id: resource_getrlimit.c,v 1.1 2006-07-28 13:36:16 obarthel Exp $ + * + * :ts=4 + * + * Portable ISO 'C' (1994) runtime library for the Amiga computer + * Copyright (c) 2002-2006 by Olaf Barthel + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Neither the name of Olaf Barthel nor the names of contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +/****************************************************************************/ + +#ifndef _STDLIB_HEADERS_H +#include "stdlib_headers.h" +#endif /* _STDLIB_HEADERS_H */ + +/****************************************************************************/ + +int +getrlimit(int resource,struct rlimit *rlp) +{ + struct Task *self; + int ret = -1; + rlim_t l; + + if(rlp == NULL) + { + __set_errno(EFAULT); + goto out; + } + + switch(resource) + { + case RLIM_VMEM: + + rlp->rlim_cur = RLIM_INFINITY; + rlp->rlim_max = RLIM_INFINITY; + break; + + case RLIM_CORE: /* Coredumps are not supported. */ + + rlp->rlim_cur = 0; + rlp->rlim_max = 0; + break; + + case RLIM_CPU: + + rlp->rlim_cur = RLIM_INFINITY; + rlp->rlim_max = RLIM_INFINITY; + break; + + case RLIM_DATA: + + #if defined(__amigaos4__) + { + l = AvailMem(MEMF_TOTAL|MEMF_VIRTUAL); + } + #else + { + l = AvailMem(MEMF_TOTAL); + } + #endif /* __amigaos4__ */ + + rlp->rlim_cur = l; + rlp->rlim_max = l; + break; + + case RLIM_FSIZE: + + rlp->rlim_cur = RLIM_INFINITY; /* Use RLIM_INFINITY in case we have a 64-bit fs. pathconf() can be more precise. */ + rlp->rlim_max = RLIM_INFINITY; + break; + + case RLIM_NOFILE: + + rlp->rlim_cur = RLIM_INFINITY; + rlp->rlim_max = RLIM_INFINITY; + break; + + case RLIM_STACK: /* Return current stacksize. */ + + self = FindTask(NULL); + + l = (char *)self->tc_SPUpper - (char *)self->tc_SPLower; + + rlp->rlim_cur = l; + rlp->rlim_max = RLIM_INFINITY; + + break; + + default: + + __set_errno(EINVAL); + goto out; + } + + ret = 0; + + out: + + return(ret); +} diff --git a/library/resource_setrlimit.c b/library/resource_setrlimit.c new file mode 100644 index 0000000..309bd2a --- /dev/null +++ b/library/resource_setrlimit.c @@ -0,0 +1,79 @@ +/* + * $Id: resource_setrlimit.c,v 1.1 2006-07-28 13:36:16 obarthel Exp $ + * + * :ts=4 + * + * Portable ISO 'C' (1994) runtime library for the Amiga computer + * Copyright (c) 2002-2006 by Olaf Barthel + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Neither the name of Olaf Barthel nor the names of contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +/****************************************************************************/ + +#ifndef _STDLIB_HEADERS_H +#include "stdlib_headers.h" +#endif /* _STDLIB_HEADERS_H */ + +/****************************************************************************/ + +int +setrlimit(int resource,const struct rlimit *rlp) +{ + int ret = -1; + + if(rlp == NULL) + { + __set_errno(EFAULT); + goto out; + } + + switch(resource) + { + case RLIM_VMEM: + case RLIM_CORE: + case RLIM_CPU: + case RLIM_DATA: + case RLIM_FSIZE: + case RLIM_NOFILE: + case RLIM_STACK: /* TODO: See if it might be possible to set the stacksize here. */ + + __set_errno(EPERM); + goto out; + + default: + + __set_errno(EINVAL); + goto out; + } + + ret = 0; + + out: + + return(ret); +}