xref: /minix3/external/bsd/bind/dist/lib/isc/win32/resource.c (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek /*	$NetBSD: resource.c,v 1.4 2014/12/10 04:38:01 christos Exp $	*/
2*00b67f09SDavid van Moolenbroek 
3*00b67f09SDavid van Moolenbroek /*
4*00b67f09SDavid van Moolenbroek  * Copyright (C) 2004, 2007, 2008  Internet Systems Consortium, Inc. ("ISC")
5*00b67f09SDavid van Moolenbroek  * Copyright (C) 2000, 2001  Internet Software Consortium.
6*00b67f09SDavid van Moolenbroek  *
7*00b67f09SDavid van Moolenbroek  * Permission to use, copy, modify, and/or distribute this software for any
8*00b67f09SDavid van Moolenbroek  * purpose with or without fee is hereby granted, provided that the above
9*00b67f09SDavid van Moolenbroek  * copyright notice and this permission notice appear in all copies.
10*00b67f09SDavid van Moolenbroek  *
11*00b67f09SDavid van Moolenbroek  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
12*00b67f09SDavid van Moolenbroek  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13*00b67f09SDavid van Moolenbroek  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
14*00b67f09SDavid van Moolenbroek  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15*00b67f09SDavid van Moolenbroek  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
16*00b67f09SDavid van Moolenbroek  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*00b67f09SDavid van Moolenbroek  * PERFORMANCE OF THIS SOFTWARE.
18*00b67f09SDavid van Moolenbroek  */
19*00b67f09SDavid van Moolenbroek 
20*00b67f09SDavid van Moolenbroek /* Id: resource.c,v 1.10 2008/07/11 23:47:09 tbox Exp  */
21*00b67f09SDavid van Moolenbroek 
22*00b67f09SDavid van Moolenbroek #include <config.h>
23*00b67f09SDavid van Moolenbroek 
24*00b67f09SDavid van Moolenbroek #include <stdio.h>
25*00b67f09SDavid van Moolenbroek 
26*00b67f09SDavid van Moolenbroek #include <isc/platform.h>
27*00b67f09SDavid van Moolenbroek #include <isc/resource.h>
28*00b67f09SDavid van Moolenbroek #include <isc/result.h>
29*00b67f09SDavid van Moolenbroek #include <isc/util.h>
30*00b67f09SDavid van Moolenbroek 
31*00b67f09SDavid van Moolenbroek #include "errno2result.h"
32*00b67f09SDavid van Moolenbroek 
33*00b67f09SDavid van Moolenbroek /*
34*00b67f09SDavid van Moolenbroek  * Windows limits the maximum number of open files to 2048
35*00b67f09SDavid van Moolenbroek  */
36*00b67f09SDavid van Moolenbroek 
37*00b67f09SDavid van Moolenbroek #define WIN32_MAX_OPEN_FILES	2048
38*00b67f09SDavid van Moolenbroek 
39*00b67f09SDavid van Moolenbroek isc_result_t
isc_resource_setlimit(isc_resource_t resource,isc_resourcevalue_t value)40*00b67f09SDavid van Moolenbroek isc_resource_setlimit(isc_resource_t resource, isc_resourcevalue_t value) {
41*00b67f09SDavid van Moolenbroek 	isc_resourcevalue_t rlim_value;
42*00b67f09SDavid van Moolenbroek 	int wresult;
43*00b67f09SDavid van Moolenbroek 
44*00b67f09SDavid van Moolenbroek 	if (resource != isc_resource_openfiles)
45*00b67f09SDavid van Moolenbroek 		return (ISC_R_NOTIMPLEMENTED);
46*00b67f09SDavid van Moolenbroek 
47*00b67f09SDavid van Moolenbroek 
48*00b67f09SDavid van Moolenbroek 	if (value == ISC_RESOURCE_UNLIMITED)
49*00b67f09SDavid van Moolenbroek 		rlim_value = WIN32_MAX_OPEN_FILES;
50*00b67f09SDavid van Moolenbroek 	else
51*00b67f09SDavid van Moolenbroek 		rlim_value = min(value, WIN32_MAX_OPEN_FILES);
52*00b67f09SDavid van Moolenbroek 
53*00b67f09SDavid van Moolenbroek 	wresult = _setmaxstdio((int) rlim_value);
54*00b67f09SDavid van Moolenbroek 
55*00b67f09SDavid van Moolenbroek 	if (wresult > 0)
56*00b67f09SDavid van Moolenbroek 		return (ISC_R_SUCCESS);
57*00b67f09SDavid van Moolenbroek 	else
58*00b67f09SDavid van Moolenbroek 		return (isc__errno2result(errno));
59*00b67f09SDavid van Moolenbroek }
60*00b67f09SDavid van Moolenbroek 
61*00b67f09SDavid van Moolenbroek isc_result_t
isc_resource_getlimit(isc_resource_t resource,isc_resourcevalue_t * value)62*00b67f09SDavid van Moolenbroek isc_resource_getlimit(isc_resource_t resource, isc_resourcevalue_t *value) {
63*00b67f09SDavid van Moolenbroek 
64*00b67f09SDavid van Moolenbroek 	if (resource != isc_resource_openfiles)
65*00b67f09SDavid van Moolenbroek 		return (ISC_R_NOTIMPLEMENTED);
66*00b67f09SDavid van Moolenbroek 
67*00b67f09SDavid van Moolenbroek 	*value = WIN32_MAX_OPEN_FILES;
68*00b67f09SDavid van Moolenbroek 	return (ISC_R_SUCCESS);
69*00b67f09SDavid van Moolenbroek }
70*00b67f09SDavid van Moolenbroek 
71*00b67f09SDavid van Moolenbroek isc_result_t
isc_resource_getcurlimit(isc_resource_t resource,isc_resourcevalue_t * value)72*00b67f09SDavid van Moolenbroek isc_resource_getcurlimit(isc_resource_t resource, isc_resourcevalue_t *value) {
73*00b67f09SDavid van Moolenbroek 	return (isc_resource_getlimit(resource, value));
74*00b67f09SDavid van Moolenbroek }
75