1 /* x.c - Some wrappers for various functions to check and exit on out-of-memory
3 * Copyright © 2005 Carl Worth
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2, or (at your option)
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software Foundation,
17 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 * Author: Carl Worth <carl@theworths.org>
25 xasprintf (char **strp, const char *fmt, ...)
30 xvasprintf (strp, fmt, ap);
35 xvasprintf (char **strp, const char *fmt, va_list ap)
39 ret = vasprintf (strp, fmt, ap);
42 fprintf (stderr, "Error: vasprintf failed: Out of memory? Aborting.\n");
48 xpipe (int filedes[2])
55 fprintf (stderr, "Error: pipe failed: %s. Aborting.\n", strerror (errno));
68 fprintf (stderr, "Error: fork failed: %s. Aborting.\n", strerror (errno));
83 fprintf (stderr, "Error: malloc failed. Out of memory. Aborting.\n");
91 xcalloc (size_t nmemb, size_t size)
95 ret = calloc (nmemb, size);
98 fprintf (stderr, "Error: calloc failed. Out of memory. Aborting.\n");
106 xrealloc (void *ptr, size_t size)
110 ret = realloc (ptr, size);
113 fprintf (stderr, "Error: realloc failed: Out of memory. Aborting.\n");
121 xfdopen (int filedes, const char *mode)
125 ret = fdopen (filedes, mode);
128 fprintf (stderr, "Error: fdopen failed: %s. Aborting.\n",
137 xfreopen (const char *path, const char *mode, FILE *stream)
141 ret = freopen (path, mode, stream);
143 fprintf (stderr, "Error: freopen of %s failed: %s. Aborting.\n",
144 path, strerror (errno));
150 xstrdup (const char *s)
160 fprintf (stderr, "Error: strdup failed: %s. Aborting.\n",
169 xfwrite (const void *ptr, size_t size, size_t nmemb, FILE *stream)
173 ret = fwrite (ptr, size, nmemb, stream);
175 fprintf (stderr, "Error: error occured during fwrite. Aborting.\n");
181 xsocket (int domain, int type, int protocol)
185 ret = socket (domain, type, protocol);
187 fprintf (stderr, "Error: socket failed: %s. Aborting.\n",
196 xbind (int sockfd, const struct sockaddr *my_addr, socklen_t addrlen)
200 ret = bind (sockfd, my_addr, addrlen);
202 fprintf (stderr, "Error: bind failed: %s. Aborting.\n",
209 xlisten (int s, int backlog)
213 ret = listen (s, backlog);
215 fprintf (stderr, "Error: listen failed: %s. Aborting.\n",
222 xfcntl (int fd, int cmd, long arg)
226 ret = fcntl (fd, cmd, arg);
228 fprintf (stderr, "Error: fcntl failed: %s. Aborting.\n",
241 struct timeval *timeout)
245 ret = select (n, readfds, writefds, exceptfds, timeout);
247 fprintf (stderr, "Error: select failed: %s. Aborting.\n",
256 xread (int fd, void *buf, size_t count)
260 ret = read (fd, buf, count);
262 fprintf (stderr, "Error: read failed: %s. Aborting.\n",
271 xwrite (int fd, const void *buf, size_t count)
275 ret = write (fd, buf, count);
277 fprintf (stderr, "Error: write failed: %s. Aborting.\n",