1*ce099b40Smartin /* $NetBSD: ulimit.c,v 1.3 2008/04/28 20:22:59 martin Exp $ */
27d2e8d65Skleink
37d2e8d65Skleink /*-
47d2e8d65Skleink * Copyright (c) 1999 The NetBSD Foundation, Inc.
57d2e8d65Skleink * All rights reserved.
67d2e8d65Skleink *
77d2e8d65Skleink * This code is derived from software contributed to The NetBSD Foundation
87d2e8d65Skleink * by Klaus Klein.
97d2e8d65Skleink *
107d2e8d65Skleink * Redistribution and use in source and binary forms, with or without
117d2e8d65Skleink * modification, are permitted provided that the following conditions
127d2e8d65Skleink * are met:
137d2e8d65Skleink * 1. Redistributions of source code must retain the above copyright
147d2e8d65Skleink * notice, this list of conditions and the following disclaimer.
157d2e8d65Skleink * 2. Redistributions in binary form must reproduce the above copyright
167d2e8d65Skleink * notice, this list of conditions and the following disclaimer in the
177d2e8d65Skleink * documentation and/or other materials provided with the distribution.
187d2e8d65Skleink *
197d2e8d65Skleink * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
207d2e8d65Skleink * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
217d2e8d65Skleink * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
227d2e8d65Skleink * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
237d2e8d65Skleink * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
247d2e8d65Skleink * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
257d2e8d65Skleink * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
267d2e8d65Skleink * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
277d2e8d65Skleink * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
287d2e8d65Skleink * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
297d2e8d65Skleink * POSSIBILITY OF SUCH DAMAGE.
307d2e8d65Skleink */
317d2e8d65Skleink
327d2e8d65Skleink #include <sys/cdefs.h>
337d2e8d65Skleink #if defined(LIBC_SCCS) && !defined(lint)
34*ce099b40Smartin __RCSID("$NetBSD: ulimit.c,v 1.3 2008/04/28 20:22:59 martin Exp $");
357d2e8d65Skleink #endif /* LIBC_SCCS and not lint */
367d2e8d65Skleink
377d2e8d65Skleink #include <sys/resource.h>
387d2e8d65Skleink #include <errno.h>
39077b67efSwiz #include <stdarg.h>
407d2e8d65Skleink #include <ulimit.h>
417d2e8d65Skleink
427d2e8d65Skleink long int
ulimit(int cmd,...)437d2e8d65Skleink ulimit(int cmd, ...)
447d2e8d65Skleink {
457d2e8d65Skleink va_list ap;
467d2e8d65Skleink struct rlimit rlimit;
477d2e8d65Skleink long int new_limit, result;
487d2e8d65Skleink
497d2e8d65Skleink va_start(ap, cmd);
507d2e8d65Skleink
517d2e8d65Skleink result = -1L;
527d2e8d65Skleink switch (cmd) {
537d2e8d65Skleink case UL_GETFSIZE:
547d2e8d65Skleink if (getrlimit(RLIMIT_FSIZE, &rlimit) == 0)
557d2e8d65Skleink result = (long int)(rlimit.rlim_cur / 512);
567d2e8d65Skleink break;
577d2e8d65Skleink case UL_SETFSIZE:
587d2e8d65Skleink new_limit = va_arg(ap, long int);
597d2e8d65Skleink rlimit.rlim_cur = rlimit.rlim_max = (rlim_t)new_limit * 512;
607d2e8d65Skleink if (setrlimit(RLIMIT_FSIZE, &rlimit) == 0)
617d2e8d65Skleink result = new_limit;
627d2e8d65Skleink break;
637d2e8d65Skleink default:
647d2e8d65Skleink errno = EINVAL;
657d2e8d65Skleink }
667d2e8d65Skleink
677d2e8d65Skleink va_end(ap);
687d2e8d65Skleink
697d2e8d65Skleink return (result);
707d2e8d65Skleink }
71