Annotation of src/usr.bin/file/xmalloc.c, Revision 1.1
1.1 ! nicm 1: /* $OpenBSD: xmalloc.c,v 1.8 2015/03/26 15:17:30 okan Exp $ */
! 2: /*
! 3: * Author: Tatu Ylonen <ylo@cs.hut.fi>
! 4: * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
! 5: * All rights reserved
! 6: * Versions of malloc and friends that check their results, and never return
! 7: * failure (they call fatal if they encounter an error).
! 8: *
! 9: * As far as I am concerned, the code I have written for this software
! 10: * can be used freely for any purpose. Any derived versions of this
! 11: * software must be clearly marked as such, and if the derived work is
! 12: * incompatible with the protocol description in the RFC file, it must be
! 13: * called by a name other than "ssh" or "Secure Shell".
! 14: */
! 15:
! 16: #include <err.h>
! 17: #include <stdarg.h>
! 18: #include <stdint.h>
! 19: #include <stdio.h>
! 20: #include <stdlib.h>
! 21: #include <string.h>
! 22:
! 23: #include "xmalloc.h"
! 24:
! 25: void *
! 26: xmalloc(size_t size)
! 27: {
! 28: void *ptr;
! 29:
! 30: if (size == 0)
! 31: errx(1, "xmalloc: zero size");
! 32: ptr = malloc(size);
! 33: if (ptr == NULL)
! 34: errx(1,
! 35: "xmalloc: out of memory (allocating %zu bytes)",
! 36: size);
! 37: return ptr;
! 38: }
! 39:
! 40: void *
! 41: xcalloc(size_t nmemb, size_t size)
! 42: {
! 43: void *ptr;
! 44:
! 45: if (size == 0 || nmemb == 0)
! 46: errx(1, "xcalloc: zero size");
! 47: if (SIZE_MAX / nmemb < size)
! 48: errx(1, "xcalloc: nmemb * size > SIZE_MAX");
! 49: ptr = calloc(nmemb, size);
! 50: if (ptr == NULL)
! 51: errx(1, "xcalloc: out of memory (allocating %zu bytes)",
! 52: (size * nmemb));
! 53: return ptr;
! 54: }
! 55:
! 56: void *
! 57: xreallocarray(void *ptr, size_t nmemb, size_t size)
! 58: {
! 59: void *new_ptr;
! 60:
! 61: new_ptr = reallocarray(ptr, nmemb, size);
! 62: if (new_ptr == NULL)
! 63: errx(1, "xreallocarray: out of memory (new_size %zu bytes)",
! 64: nmemb * size);
! 65: return new_ptr;
! 66: }
! 67:
! 68: void
! 69: xfree(void *ptr)
! 70: {
! 71: if (ptr == NULL)
! 72: errx(1, "xfree: NULL pointer given as argument");
! 73: free(ptr);
! 74: }
! 75:
! 76: char *
! 77: xstrdup(const char *str)
! 78: {
! 79: size_t len;
! 80: char *cp;
! 81:
! 82: len = strlen(str) + 1;
! 83: cp = xmalloc(len);
! 84: if (strlcpy(cp, str, len) >= len)
! 85: errx(1, "xstrdup: string truncated");
! 86: return cp;
! 87: }
! 88:
! 89: int
! 90: xasprintf(char **ret, const char *fmt, ...)
! 91: {
! 92: va_list ap;
! 93: int i;
! 94:
! 95: va_start(ap, fmt);
! 96: i = vasprintf(ret, fmt, ap);
! 97: va_end(ap);
! 98:
! 99: if (i < 0 || *ret == NULL)
! 100: errx(1, "xasprintf: could not allocate memory");
! 101:
! 102: return (i);
! 103: }