Annotation of src/usr.bin/ssh/xmalloc.c, Revision 1.33
1.33 ! dtucker 1: /* $OpenBSD: xmalloc.c,v 1.32 2015/04/24 01:36:01 deraadt Exp $ */
1.1 deraadt 2: /*
1.5 deraadt 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).
1.11 stevesk 8: *
1.8 deraadt 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".
1.5 deraadt 14: */
1.1 deraadt 15:
1.22 stevesk 16: #include <stdarg.h>
1.31 millert 17: #include <stdint.h>
1.26 stevesk 18: #include <stdio.h>
1.25 stevesk 19: #include <stdlib.h>
1.23 stevesk 20: #include <string.h>
1.1 deraadt 21:
1.9 markus 22: #include "xmalloc.h"
23: #include "log.h"
1.33 ! dtucker 24:
! 25: void
! 26: ssh_malloc_init(void)
! 27: {
! 28: extern char *malloc_options;
! 29:
! 30: malloc_options = "S";
! 31: }
1.1 deraadt 32:
1.4 markus 33: void *
34: xmalloc(size_t size)
1.1 deraadt 35: {
1.12 deraadt 36: void *ptr;
37:
38: if (size == 0)
39: fatal("xmalloc: zero size");
40: ptr = malloc(size);
1.4 markus 41: if (ptr == NULL)
1.29 tedu 42: fatal("xmalloc: out of memory (allocating %zu bytes)", size);
1.4 markus 43: return ptr;
1.1 deraadt 44: }
45:
1.4 markus 46: void *
1.18 djm 47: xcalloc(size_t nmemb, size_t size)
48: {
49: void *ptr;
50:
51: if (size == 0 || nmemb == 0)
52: fatal("xcalloc: zero size");
1.31 millert 53: if (SIZE_MAX / nmemb < size)
54: fatal("xcalloc: nmemb * size > SIZE_MAX");
1.18 djm 55: ptr = calloc(nmemb, size);
56: if (ptr == NULL)
1.29 tedu 57: fatal("xcalloc: out of memory (allocating %zu bytes)",
58: size * nmemb);
1.18 djm 59: return ptr;
60: }
61:
62: void *
1.32 deraadt 63: xreallocarray(void *ptr, size_t nmemb, size_t size)
1.1 deraadt 64: {
1.4 markus 65: void *new_ptr;
1.1 deraadt 66:
1.32 deraadt 67: new_ptr = reallocarray(ptr, nmemb, size);
1.4 markus 68: if (new_ptr == NULL)
1.32 deraadt 69: fatal("xreallocarray: out of memory (%zu elements of %zu bytes)",
70: nmemb, size);
1.4 markus 71: return new_ptr;
1.1 deraadt 72: }
73:
1.4 markus 74: char *
75: xstrdup(const char *str)
1.1 deraadt 76: {
1.16 stevesk 77: size_t len;
1.12 deraadt 78: char *cp;
1.2 deraadt 79:
1.16 stevesk 80: len = strlen(str) + 1;
1.12 deraadt 81: cp = xmalloc(len);
1.4 markus 82: strlcpy(cp, str, len);
83: return cp;
1.18 djm 84: }
85:
86: int
87: xasprintf(char **ret, const char *fmt, ...)
88: {
89: va_list ap;
90: int i;
91:
92: va_start(ap, fmt);
93: i = vasprintf(ret, fmt, ap);
94: va_end(ap);
95:
96: if (i < 0 || *ret == NULL)
97: fatal("xasprintf: could not allocate memory");
98:
99: return (i);
1.1 deraadt 100: }