2 * Copyright © 2004 Red Hat, Inc.
4 * Permission to use, copy, modify, distribute, and sell this software
5 * and its documentation for any purpose is hereby granted without
6 * fee, provided that the above copyright notice appear in all copies
7 * and that both that copyright notice and this permission notice
8 * appear in supporting documentation, and that the name of
9 * Red Hat, Inc. not be used in advertising or publicity pertaining to
10 * distribution of the software without specific, written prior
11 * permission. Red Hat, Inc. makes no representations about the
12 * suitability of this software for any purpose. It is provided "as
13 * is" without express or implied warranty.
15 * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
16 * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
17 * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
18 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
19 * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
20 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
21 * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23 * Author: Carl D. Worth <cworth@cworth.org>
26 #define _GNU_SOURCE 1 /* for vasprintf */
28 #include "cairo-boilerplate.h"
29 #include "cairo-boilerplate-system.h"
49 fprintf (stderr, "Error: Out of memory. Exiting.\n");
57 xcalloc (size_t nmemb,
62 if (nmemb == 0 || size == 0)
65 buf = calloc (nmemb, size);
67 fprintf (stderr, "Error: Out of memory. Exiting\n");
78 buf = realloc (buf, size);
79 if (buf == NULL && size != 0) {
80 fprintf (stderr, "Error: Out of memory. Exiting\n");
88 xasprintf (char **strp,
97 ret = vasprintf (strp, fmt, va);
101 fprintf (stderr, "Error: Out of memory. Exiting.\n");
104 #else /* !HAVE_VASNPRINTF */
105 #define BUF_SIZE 1024
107 char buffer[BUF_SIZE];
111 ret = vsnprintf (buffer, sizeof (buffer), fmt, va);
115 fprintf (stderr, "Failure in vsnprintf\n");
119 len = (ret + sizeof (int)) & -sizeof (int);
120 *strp = malloc (len);
122 fprintf (stderr, "Out of memory\n");
126 if ((unsigned) ret < sizeof (buffer)) {
127 memcpy (*strp, buffer, ret);
130 ret = vsnprintf (*strp, len, fmt, va);
135 fprintf (stderr, "Overflowed dynamic buffer\n");
139 memset (*strp + ret, 0, len-ret);
140 #endif /* !HAVE_VASNPRINTF */
144 xunlink (const char *pathname)
146 if (unlink (pathname) < 0 && errno != ENOENT) {
147 fprintf (stderr, "Error: Cannot remove %s: %s\n",
148 pathname, strerror (errno));
154 xstrdup (const char *str)
161 fprintf (stderr, "Error: Out of memory. Exiting.\n");