[BACK]Return to xmalloc.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Annotation of src/usr.bin/tmux/xmalloc.c, Revision 1.9

1.9     ! nicm        1: /* $OpenBSD: xmalloc.c,v 1.13 2015/11/17 18:25:02 tobias Exp $ */
1.1       nicm        2:
                      3: /*
1.9     ! nicm        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 fatal if they encounter an error).
1.1       nicm        9:  *
1.9     ! nicm       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".
1.1       nicm       15:  */
                     16:
1.9     ! nicm       17: #include <errno.h>
        !            18: #include <limits.h>
1.1       nicm       19: #include <stdint.h>
1.9     ! nicm       20: #include <stdio.h>
1.1       nicm       21: #include <stdlib.h>
                     22: #include <string.h>
                     23:
                     24: #include "tmux.h"
                     25:
1.9     ! nicm       26: void *
        !            27: xmalloc(size_t size)
1.1       nicm       28: {
1.9     ! nicm       29:        void *ptr;
1.1       nicm       30:
1.9     ! nicm       31:        if (size == 0)
        !            32:                fatal("xmalloc: zero size");
        !            33:        ptr = malloc(size);
        !            34:        if (ptr == NULL)
        !            35:                fatal("xmalloc: allocating %zu bytes: %s",
        !            36:                    size, strerror(errno));
        !            37:        return ptr;
1.1       nicm       38: }
                     39:
                     40: void *
                     41: xcalloc(size_t nmemb, size_t size)
                     42: {
1.9     ! nicm       43:        void *ptr;
1.1       nicm       44:
1.3       deraadt    45:        if (size == 0 || nmemb == 0)
1.9     ! nicm       46:                fatal("xcalloc: zero size");
        !            47:        ptr = calloc(nmemb, size);
        !            48:        if (ptr == NULL)
        !            49:                fatal("xcalloc: allocating %zu * %zu bytes: %s",
        !            50:                    nmemb, size, strerror(errno));
        !            51:        return ptr;
1.1       nicm       52: }
                     53:
                     54: void *
1.9     ! nicm       55: xrealloc(void *ptr, size_t size)
1.1       nicm       56: {
1.9     ! nicm       57:        return xreallocarray(ptr, 1, size);
1.1       nicm       58: }
                     59:
                     60: void *
1.9     ! nicm       61: xreallocarray(void *ptr, size_t nmemb, size_t size)
1.5       nicm       62: {
1.9     ! nicm       63:        void *new_ptr;
1.5       nicm       64:
1.9     ! nicm       65:        if (nmemb == 0 || size == 0)
        !            66:                fatal("xreallocarray: zero size");
        !            67:        new_ptr = reallocarray(ptr, nmemb, size);
        !            68:        if (new_ptr == NULL)
        !            69:                fatal("xreallocarray: allocating %zu * %zu bytes: %s",
        !            70:                    nmemb, size, strerror(errno));
        !            71:        return new_ptr;
1.5       nicm       72: }
                     73:
1.9     ! nicm       74: char *
        !            75: xstrdup(const char *str)
1.1       nicm       76: {
1.9     ! nicm       77:        char *cp;
1.1       nicm       78:
1.9     ! nicm       79:        if ((cp = strdup(str)) == NULL)
        !            80:                fatal("xstrdup: %s", strerror(errno));
        !            81:        return cp;
1.1       nicm       82: }
                     83:
1.7       nicm       84: int
1.1       nicm       85: xasprintf(char **ret, const char *fmt, ...)
                     86: {
1.3       deraadt    87:        va_list ap;
1.9     ! nicm       88:        int i;
1.1       nicm       89:
1.3       deraadt    90:        va_start(ap, fmt);
                     91:        i = xvasprintf(ret, fmt, ap);
                     92:        va_end(ap);
1.1       nicm       93:
1.9     ! nicm       94:        return i;
1.1       nicm       95: }
                     96:
                     97: int
                     98: xvasprintf(char **ret, const char *fmt, va_list ap)
                     99: {
1.9     ! nicm      100:        int i;
1.1       nicm      101:
                    102:        i = vasprintf(ret, fmt, ap);
1.9     ! nicm      103:
1.3       deraadt   104:        if (i < 0 || *ret == NULL)
1.9     ! nicm      105:                fatal("xasprintf: %s", strerror(errno));
1.1       nicm      106:
1.9     ! nicm      107:        return i;
1.1       nicm      108: }
                    109:
1.7       nicm      110: int
1.9     ! nicm      111: xsnprintf(char *str, size_t len, const char *fmt, ...)
1.1       nicm      112: {
1.3       deraadt   113:        va_list ap;
1.9     ! nicm      114:        int i;
1.1       nicm      115:
1.3       deraadt   116:        va_start(ap, fmt);
1.9     ! nicm      117:        i = xvsnprintf(str, len, fmt, ap);
1.3       deraadt   118:        va_end(ap);
1.1       nicm      119:
1.9     ! nicm      120:        return i;
1.1       nicm      121: }
                    122:
                    123: int
1.9     ! nicm      124: xvsnprintf(char *str, size_t len, const char *fmt, va_list ap)
1.1       nicm      125: {
1.9     ! nicm      126:        int i;
1.1       nicm      127:
                    128:        if (len > INT_MAX)
1.9     ! nicm      129:                fatal("xsnprintf: len > INT_MAX");
        !           130:
        !           131:        i = vsnprintf(str, len, fmt, ap);
1.1       nicm      132:
1.8       tobias    133:        if (i < 0 || i >= (int)len)
1.9     ! nicm      134:                fatal("xsnprintf: overflow");
1.1       nicm      135:
1.9     ! nicm      136:        return i;
1.1       nicm      137: }