1*eab38032Sriastradh /* $NetBSD: linux_limit.h,v 1.10 2024/10/01 16:41:29 riastradh Exp $ */ 2ee0c5b44Smanu 3ee0c5b44Smanu /*- 4ee0c5b44Smanu * Copyright (c) 1995, 1998, 1999 The NetBSD Foundation, Inc. 5ee0c5b44Smanu * All rights reserved. 6ee0c5b44Smanu * 7ee0c5b44Smanu * This code is derived from software contributed to The NetBSD Foundation 8ee0c5b44Smanu * by Frank van der Linden and Eric Haszlakiewicz; by Jason R. Thorpe 9ee0c5b44Smanu * of the Numerical Aerospace Simulation Facility, NASA Ames Research Center. 10ee0c5b44Smanu * 11ee0c5b44Smanu * Redistribution and use in source and binary forms, with or without 12ee0c5b44Smanu * modification, are permitted provided that the following conditions 13ee0c5b44Smanu * are met: 14ee0c5b44Smanu * 1. Redistributions of source code must retain the above copyright 15ee0c5b44Smanu * notice, this list of conditions and the following disclaimer. 16ee0c5b44Smanu * 2. Redistributions in binary form must reproduce the above copyright 17ee0c5b44Smanu * notice, this list of conditions and the following disclaimer in the 18ee0c5b44Smanu * documentation and/or other materials provided with the distribution. 19ee0c5b44Smanu * 20ee0c5b44Smanu * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 21ee0c5b44Smanu * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22ee0c5b44Smanu * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23ee0c5b44Smanu * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 24ee0c5b44Smanu * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25ee0c5b44Smanu * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26ee0c5b44Smanu * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27ee0c5b44Smanu * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28ee0c5b44Smanu * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29ee0c5b44Smanu * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30ee0c5b44Smanu * POSSIBILITY OF SUCH DAMAGE. 31ee0c5b44Smanu */ 32ee0c5b44Smanu 33ee0c5b44Smanu #ifndef _LINUX_LIMIT_H_ 34ee0c5b44Smanu #define _LINUX_LIMIT_H_ 35ee0c5b44Smanu 36f2af9174Sdsl static int linux_to_bsd_limit(int); 37ee0c5b44Smanu 388f021900Sryo #define bsd_to_linux_rlimit64_1(l, b, f) \ 39ee0c5b44Smanu (l)->f = ((b)->f == RLIM_INFINITY || \ 40ee0c5b44Smanu ((b)->f & 0x8000000000000000UL) != 0) ? \ 41ee0c5b44Smanu LINUX_RLIM_INFINITY : (b)->f 428f021900Sryo #define bsd_to_linux_rlimit32_1(l, b, f) \ 43ee0c5b44Smanu (l)->f = ((b)->f == RLIM_INFINITY || \ 44ee0c5b44Smanu ((b)->f & 0xffffffff00000000ULL) != 0) ? \ 45ee0c5b44Smanu LINUX_RLIM_INFINITY : (int32_t)(b)->f 468f021900Sryo 478f021900Sryo #define bsd_to_linux_rlimit64(l, b) \ 488f021900Sryo bsd_to_linux_rlimit64_1(l, b, rlim_cur); \ 498f021900Sryo bsd_to_linux_rlimit64_1(l, b, rlim_max) 508f021900Sryo #define bsd_to_linux_rlimit32(l, b) \ 518f021900Sryo bsd_to_linux_rlimit32_1(l, b, rlim_cur); \ 528f021900Sryo bsd_to_linux_rlimit32_1(l, b, rlim_max) 538f021900Sryo 548f021900Sryo #ifdef LINUX_LARGEFILE64 558f021900Sryo #define bsd_to_linux_rlimit(l, b) bsd_to_linux_rlimit64(l, b) 568f021900Sryo #else 578f021900Sryo #define bsd_to_linux_rlimit(l, b) bsd_to_linux_rlimit32(l, b) 58ee0c5b44Smanu #endif 59ee0c5b44Smanu 60ee0c5b44Smanu #define linux_to_bsd_rlimit1(b, l, f) \ 61ee0c5b44Smanu (b)->f = (l)->f == LINUX_RLIM_INFINITY ? RLIM_INFINITY : (l)->f 62ee0c5b44Smanu #define linux_to_bsd_rlimit(b, l) \ 63ee0c5b44Smanu linux_to_bsd_rlimit1(b, l, rlim_cur); \ 64ee0c5b44Smanu linux_to_bsd_rlimit1(b, l, rlim_max) 65ee0c5b44Smanu 66511ffdebSjoerg #define linux32_to_bsd_rlimit1(b, l, f) \ 67361da585Snjoly (b)->f = (l)->f == LINUX32_RLIM_INFINITY ? RLIM_INFINITY : (uint32_t)(l)->f 68511ffdebSjoerg #define linux32_to_bsd_rlimit(b, l) \ 69511ffdebSjoerg linux32_to_bsd_rlimit1(b, l, rlim_cur); \ 70511ffdebSjoerg linux32_to_bsd_rlimit1(b, l, rlim_max) 71511ffdebSjoerg 72ee0c5b44Smanu static int 739fca5da6Scegger linux_to_bsd_limit(int lim) 74ee0c5b44Smanu { 75ee0c5b44Smanu switch (lim) { 76ee0c5b44Smanu case LINUX_RLIMIT_CPU: 77ee0c5b44Smanu return RLIMIT_CPU; 78ee0c5b44Smanu case LINUX_RLIMIT_FSIZE: 79ee0c5b44Smanu return RLIMIT_FSIZE; 80ee0c5b44Smanu case LINUX_RLIMIT_DATA: 81ee0c5b44Smanu return RLIMIT_DATA; 82ee0c5b44Smanu case LINUX_RLIMIT_STACK: 83ee0c5b44Smanu return RLIMIT_STACK; 84ee0c5b44Smanu case LINUX_RLIMIT_CORE: 85ee0c5b44Smanu return RLIMIT_CORE; 86ee0c5b44Smanu case LINUX_RLIMIT_RSS: 87ee0c5b44Smanu return RLIMIT_RSS; 88ee0c5b44Smanu case LINUX_RLIMIT_NPROC: 89ee0c5b44Smanu return RLIMIT_NPROC; 90ee0c5b44Smanu case LINUX_RLIMIT_NOFILE: 91ee0c5b44Smanu return RLIMIT_NOFILE; 92ee0c5b44Smanu case LINUX_RLIMIT_MEMLOCK: 93ee0c5b44Smanu return RLIMIT_MEMLOCK; 94ee0c5b44Smanu case LINUX_RLIMIT_AS: 95fcc02354Smrg return RLIMIT_AS; 96ee0c5b44Smanu case LINUX_RLIMIT_LOCKS: 9725cb9c57Schristos case LINUX_RLIMIT_SIGPENDING: 9825cb9c57Schristos case LINUX_RLIMIT_MSGQUEUE: 9925cb9c57Schristos case LINUX_RLIMIT_NICE: 10025cb9c57Schristos case LINUX_RLIMIT_RTPRIO: 10125cb9c57Schristos case LINUX_RLIMIT_RTTIME: 102ee0c5b44Smanu return -EOPNOTSUPP; 103ee0c5b44Smanu default: 104ee0c5b44Smanu return -EINVAL; 105ee0c5b44Smanu } 106ee0c5b44Smanu } 107ee0c5b44Smanu 108ee0c5b44Smanu 109ee0c5b44Smanu #endif /* _LINUX_LIMIT_H_ */ 110