"Fossies" - the Fresh Open Source Software Archive

Member "bind-9.11.23/lib/isc/unix/os.c" (7 Sep 2020, 1656 Bytes) of package /linux/misc/dns/bind9/9.11.23/bind-9.11.23.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "os.c" see the Fossies "Dox" file reference documentation.

    1 /*
    2  * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
    3  *
    4  * This Source Code Form is subject to the terms of the Mozilla Public
    5  * License, v. 2.0. If a copy of the MPL was not distributed with this
    6  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
    7  *
    8  * See the COPYRIGHT file distributed with this work for additional
    9  * information regarding copyright ownership.
   10  */
   11 
   12 
   13 #include <config.h>
   14 
   15 #include <isc/os.h>
   16 
   17 
   18 #ifdef HAVE_SYSCONF
   19 
   20 #include <unistd.h>
   21 
   22 #ifndef __hpux
   23 static inline long
   24 sysconf_ncpus(void) {
   25 #if defined(_SC_NPROCESSORS_ONLN)
   26     return sysconf((_SC_NPROCESSORS_ONLN));
   27 #elif defined(_SC_NPROC_ONLN)
   28     return sysconf((_SC_NPROC_ONLN));
   29 #else
   30     return (0);
   31 #endif
   32 }
   33 #endif
   34 #endif /* HAVE_SYSCONF */
   35 
   36 
   37 #ifdef __hpux
   38 
   39 #include <sys/pstat.h>
   40 
   41 static inline int
   42 hpux_ncpus(void) {
   43     struct pst_dynamic psd;
   44     if (pstat_getdynamic(&psd, sizeof(psd), 1, 0) != -1)
   45         return (psd.psd_proc_cnt);
   46     else
   47         return (0);
   48 }
   49 
   50 #endif /* __hpux */
   51 
   52 #if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_SYSCTLBYNAME)
   53 #include <sys/types.h>  /* for FreeBSD */
   54 #include <sys/param.h>  /* for NetBSD */
   55 #include <sys/sysctl.h>
   56 
   57 static int
   58 sysctl_ncpus(void) {
   59     int ncpu, result;
   60     size_t len;
   61 
   62     len = sizeof(ncpu);
   63     result = sysctlbyname("hw.ncpu", &ncpu, &len , 0, 0);
   64     if (result != -1)
   65         return (ncpu);
   66     return (0);
   67 }
   68 #endif
   69 
   70 unsigned int
   71 isc_os_ncpus(void) {
   72     long ncpus = 0;
   73 
   74 #ifdef __hpux
   75     ncpus = hpux_ncpus();
   76 #elif defined(HAVE_SYSCONF)
   77     ncpus = sysconf_ncpus();
   78 #endif
   79 #if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_SYSCTLBYNAME)
   80     if (ncpus <= 0)
   81         ncpus = sysctl_ncpus();
   82 #endif
   83     if (ncpus <= 0)
   84         ncpus = 1;
   85 
   86     return ((unsigned int)ncpus);
   87 }