xref: /netbsd-src/lib/libc/gen/ulimit.c (revision ce099b40997c43048fb78bd578195f81d2456523)
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