]> git.proxmox.com Git - mirror_zfs.git/blame - zfs/zcmd/zpool/zpool_util.c
Rebase to OpenSolaris b103, in the process we are removing any code which did not...
[mirror_zfs.git] / zfs / zcmd / zpool / zpool_util.c
CommitLineData
34dc7c2f
BB
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 http://www.opensolaris.org/os/licensing.
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 2007 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
24 */
25
b128c09f 26#pragma ident "%Z%%M% %I% %E% SMI"
34dc7c2f
BB
27
28#include <errno.h>
29#include <libgen.h>
30#include <libintl.h>
31#include <stdio.h>
32#include <stdlib.h>
33#include <strings.h>
34
35#include "zpool_util.h"
36
37/*
38 * Utility function to guarantee malloc() success.
39 */
40void *
41safe_malloc(size_t size)
42{
43 void *data;
44
45 if ((data = calloc(1, size)) == NULL) {
46 (void) fprintf(stderr, "internal error: out of memory\n");
47 exit(1);
48 }
49
50 return (data);
51}
52
53/*
54 * Same as above, but for strdup()
55 */
56char *
57safe_strdup(const char *str)
58{
59 char *ret;
60
61 if ((ret = strdup(str)) == NULL) {
62 (void) fprintf(stderr, "internal error: out of memory\n");
63 exit(1);
64 }
65
66 return (ret);
67}
68
69/*
70 * Display an out of memory error message and abort the current program.
71 */
72void
73zpool_no_memory(void)
74{
75 assert(errno == ENOMEM);
76 (void) fprintf(stderr,
77 gettext("internal error: out of memory\n"));
78 exit(1);
79}
80
81/*
82 * Return the number of logs in supplied nvlist
83 */
84uint_t
85num_logs(nvlist_t *nv)
86{
87 uint_t nlogs = 0;
88 uint_t c, children;
89 nvlist_t **child;
90
91 if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN,
92 &child, &children) != 0)
93 return (0);
94
95 for (c = 0; c < children; c++) {
96 uint64_t is_log = B_FALSE;
97
98 (void) nvlist_lookup_uint64(child[c], ZPOOL_CONFIG_IS_LOG,
99 &is_log);
100 if (is_log)
101 nlogs++;
102 }
103 return (nlogs);
104}