The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/openzfs/cmd/zpool/zpool_util.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * CDDL HEADER START
    3  *
    4  * The contents of this file are subject to the terms of the
    5  * Common Development and Distribution License (the "License").
    6  * You may not use this file except in compliance with the License.
    7  *
    8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
    9  * or https://opensource.org/licenses/CDDL-1.0.
   10  * See the License for the specific language governing permissions
   11  * and limitations under the License.
   12  *
   13  * When distributing Covered Code, include this CDDL HEADER in each
   14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
   15  * If applicable, add the following below this CDDL HEADER, with the
   16  * fields enclosed by brackets "[]" replaced with your own identifying
   17  * information: Portions Copyright [yyyy] [name of copyright owner]
   18  *
   19  * CDDL HEADER END
   20  */
   21 /*
   22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
   23  * Use is subject to license terms.
   24  */
   25 
   26 #include <errno.h>
   27 #include <libgen.h>
   28 #include <libintl.h>
   29 #include <stdio.h>
   30 #include <stdlib.h>
   31 #include <string.h>
   32 #include <ctype.h>
   33 
   34 #include "zpool_util.h"
   35 
   36 /*
   37  * Utility function to guarantee malloc() success.
   38  */
   39 void *
   40 safe_malloc(size_t size)
   41 {
   42         void *data;
   43 
   44         if ((data = calloc(1, size)) == NULL) {
   45                 (void) fprintf(stderr, "internal error: out of memory\n");
   46                 exit(1);
   47         }
   48 
   49         return (data);
   50 }
   51 
   52 /*
   53  * Utility function to guarantee realloc() success.
   54  */
   55 void *
   56 safe_realloc(void *from, size_t size)
   57 {
   58         void *data;
   59 
   60         if ((data = realloc(from, size)) == NULL) {
   61                 (void) fprintf(stderr, "internal error: out of memory\n");
   62                 exit(1);
   63         }
   64 
   65         return (data);
   66 }
   67 
   68 /*
   69  * Display an out of memory error message and abort the current program.
   70  */
   71 void
   72 zpool_no_memory(void)
   73 {
   74         assert(errno == ENOMEM);
   75         (void) fprintf(stderr,
   76             gettext("internal error: out of memory\n"));
   77         exit(1);
   78 }
   79 
   80 /*
   81  * Return the number of logs in supplied nvlist
   82  */
   83 uint_t
   84 num_logs(nvlist_t *nv)
   85 {
   86         uint_t nlogs = 0;
   87         uint_t c, children;
   88         nvlist_t **child;
   89 
   90         if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN,
   91             &child, &children) != 0)
   92                 return (0);
   93 
   94         for (c = 0; c < children; c++) {
   95                 uint64_t is_log = B_FALSE;
   96 
   97                 (void) nvlist_lookup_uint64(child[c], ZPOOL_CONFIG_IS_LOG,
   98                     &is_log);
   99                 if (is_log)
  100                         nlogs++;
  101         }
  102         return (nlogs);
  103 }
  104 
  105 /* Find the max element in an array of uint64_t values */
  106 uint64_t
  107 array64_max(uint64_t array[], unsigned int len)
  108 {
  109         uint64_t max = 0;
  110         int i;
  111         for (i = 0; i < len; i++)
  112                 max = MAX(max, array[i]);
  113 
  114         return (max);
  115 }
  116 
  117 /*
  118  * Find highest one bit set.
  119  * Returns bit number + 1 of highest bit that is set, otherwise returns 0.
  120  */
  121 int
  122 highbit64(uint64_t i)
  123 {
  124         if (i == 0)
  125                 return (0);
  126 
  127         return (NBBY * sizeof (uint64_t) - __builtin_clzll(i));
  128 }
  129 
  130 /*
  131  * Find lowest one bit set.
  132  * Returns bit number + 1 of lowest bit that is set, otherwise returns 0.
  133  */
  134 int
  135 lowbit64(uint64_t i)
  136 {
  137         if (i == 0)
  138                 return (0);
  139 
  140         return (__builtin_ffsll(i));
  141 }

Cache object: 124e8f2da915ef542c776ec40caec7a4


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.