Annotation of embedaddon/tmux/xmalloc.c, revision 1.1
1.1 ! misho 1: /* $OpenBSD$ */
! 2:
! 3: /*
! 4: * Author: Tatu Ylonen <ylo@cs.hut.fi>
! 5: * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
! 6: * All rights reserved
! 7: * Versions of malloc and friends that check their results, and never return
! 8: * failure (they call fatalx if they encounter an error).
! 9: *
! 10: * As far as I am concerned, the code I have written for this software
! 11: * can be used freely for any purpose. Any derived versions of this
! 12: * software must be clearly marked as such, and if the derived work is
! 13: * incompatible with the protocol description in the RFC file, it must be
! 14: * called by a name other than "ssh" or "Secure Shell".
! 15: */
! 16:
! 17: #include <errno.h>
! 18: #include <limits.h>
! 19: #include <stdint.h>
! 20: #include <stdio.h>
! 21: #include <stdlib.h>
! 22: #include <string.h>
! 23:
! 24: #include "tmux.h"
! 25:
! 26: void *
! 27: xmalloc(size_t size)
! 28: {
! 29: void *ptr;
! 30:
! 31: if (size == 0)
! 32: fatalx("xmalloc: zero size");
! 33: ptr = malloc(size);
! 34: if (ptr == NULL)
! 35: fatalx("xmalloc: allocating %zu bytes: %s",
! 36: size, strerror(errno));
! 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: fatalx("xcalloc: zero size");
! 47: ptr = calloc(nmemb, size);
! 48: if (ptr == NULL)
! 49: fatalx("xcalloc: allocating %zu * %zu bytes: %s",
! 50: nmemb, size, strerror(errno));
! 51: return ptr;
! 52: }
! 53:
! 54: void *
! 55: xrealloc(void *ptr, size_t size)
! 56: {
! 57: return xreallocarray(ptr, 1, size);
! 58: }
! 59:
! 60: void *
! 61: xreallocarray(void *ptr, size_t nmemb, size_t size)
! 62: {
! 63: void *new_ptr;
! 64:
! 65: if (nmemb == 0 || size == 0)
! 66: fatalx("xreallocarray: zero size");
! 67: new_ptr = reallocarray(ptr, nmemb, size);
! 68: if (new_ptr == NULL)
! 69: fatalx("xreallocarray: allocating %zu * %zu bytes: %s",
! 70: nmemb, size, strerror(errno));
! 71: return new_ptr;
! 72: }
! 73:
! 74: char *
! 75: xstrdup(const char *str)
! 76: {
! 77: char *cp;
! 78:
! 79: if ((cp = strdup(str)) == NULL)
! 80: fatalx("xstrdup: %s", strerror(errno));
! 81: return cp;
! 82: }
! 83:
! 84: char *
! 85: xstrndup(const char *str, size_t maxlen)
! 86: {
! 87: char *cp;
! 88:
! 89: if ((cp = strndup(str, maxlen)) == NULL)
! 90: fatalx("xstrndup: %s", strerror(errno));
! 91: return cp;
! 92: }
! 93:
! 94: int
! 95: xasprintf(char **ret, const char *fmt, ...)
! 96: {
! 97: va_list ap;
! 98: int i;
! 99:
! 100: va_start(ap, fmt);
! 101: i = xvasprintf(ret, fmt, ap);
! 102: va_end(ap);
! 103:
! 104: return i;
! 105: }
! 106:
! 107: int
! 108: xvasprintf(char **ret, const char *fmt, va_list ap)
! 109: {
! 110: int i;
! 111:
! 112: i = vasprintf(ret, fmt, ap);
! 113:
! 114: if (i < 0 || *ret == NULL)
! 115: fatalx("xasprintf: %s", strerror(errno));
! 116:
! 117: return i;
! 118: }
! 119:
! 120: int
! 121: xsnprintf(char *str, size_t len, const char *fmt, ...)
! 122: {
! 123: va_list ap;
! 124: int i;
! 125:
! 126: va_start(ap, fmt);
! 127: i = xvsnprintf(str, len, fmt, ap);
! 128: va_end(ap);
! 129:
! 130: return i;
! 131: }
! 132:
! 133: int
! 134: xvsnprintf(char *str, size_t len, const char *fmt, va_list ap)
! 135: {
! 136: int i;
! 137:
! 138: if (len > INT_MAX)
! 139: fatalx("xsnprintf: len > INT_MAX");
! 140:
! 141: i = vsnprintf(str, len, fmt, ap);
! 142:
! 143: if (i < 0 || i >= (int)len)
! 144: fatalx("xsnprintf: overflow");
! 145:
! 146: return i;
! 147: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>