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/lib/libuutil/uu_alloc.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 (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
   23  */
   24 
   25 #include "libuutil_common.h"
   26 
   27 #include <stdarg.h>
   28 #include <stdio.h>
   29 #include <stdlib.h>
   30 #include <string.h>
   31 
   32 void *
   33 uu_zalloc(size_t n)
   34 {
   35         void *p = malloc(n);
   36 
   37         if (p == NULL) {
   38                 uu_set_error(UU_ERROR_SYSTEM);
   39                 return (NULL);
   40         }
   41 
   42         (void) memset(p, 0, n);
   43 
   44         return (p);
   45 }
   46 
   47 void
   48 uu_free(void *p)
   49 {
   50         free(p);
   51 }
   52 
   53 char *
   54 uu_strdup(const char *str)
   55 {
   56         char *buf = NULL;
   57 
   58         if (str != NULL) {
   59                 size_t sz;
   60 
   61                 sz = strlen(str) + 1;
   62                 buf = uu_zalloc(sz);
   63                 if (buf != NULL)
   64                         (void) memcpy(buf, str, sz);
   65         }
   66         return (buf);
   67 }
   68 
   69 /*
   70  * Duplicate up to n bytes of a string.  Kind of sort of like
   71  * strdup(strlcpy(s, n)).
   72  */
   73 char *
   74 uu_strndup(const char *s, size_t n)
   75 {
   76         size_t len;
   77         char *p;
   78 
   79         len = strnlen(s, n);
   80         p = uu_zalloc(len + 1);
   81         if (p == NULL)
   82                 return (NULL);
   83 
   84         if (len > 0)
   85                 (void) memcpy(p, s, len);
   86         p[len] = '\0';
   87 
   88         return (p);
   89 }
   90 
   91 /*
   92  * Duplicate a block of memory.  Combines malloc with memcpy, much as
   93  * strdup combines malloc, strlen, and strcpy.
   94  */
   95 void *
   96 uu_memdup(const void *buf, size_t sz)
   97 {
   98         void *p;
   99 
  100         p = uu_zalloc(sz);
  101         if (p == NULL)
  102                 return (NULL);
  103         (void) memcpy(p, buf, sz);
  104         return (p);
  105 }
  106 
  107 char *
  108 uu_msprintf(const char *format, ...)
  109 {
  110         va_list args;
  111         char attic[1];
  112         uint_t M, m;
  113         char *b;
  114 
  115         va_start(args, format);
  116         M = vsnprintf(attic, 1, format, args);
  117         va_end(args);
  118 
  119         for (;;) {
  120                 m = M;
  121                 if ((b = uu_zalloc(m + 1)) == NULL)
  122                         return (NULL);
  123 
  124                 va_start(args, format);
  125                 M = vsnprintf(b, m + 1, format, args);
  126                 va_end(args);
  127 
  128                 if (M == m)
  129                         break;          /* sizes match */
  130 
  131                 uu_free(b);
  132         }
  133 
  134         return (b);
  135 }

Cache object: 8d29928bc74852e57cb740812b6d3cb6


[ 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.