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>
27 xasprintf (char **strp, const char *fmt, ...)
32 xvasprintf (strp, fmt, ap);
37 xvasprintf (char **strp, const char *fmt, va_list ap)
41 ret = vasprintf (strp, fmt, ap);
44 fprintf (stderr, "Error: vasprintf failed: Out of memory? Aborting.\n");
50 xpipe (int filedes[2])
57 fprintf (stderr, "Error: pipe failed: %s. Aborting.\n", strerror (errno));
70 fprintf (stderr, "Error: fork failed: %s. Aborting.\n", strerror (errno));
85 fprintf (stderr, "Error: malloc failed. Out of memory. Aborting.\n");
93 xcalloc (size_t nmemb, size_t size)
97 ret = calloc (nmemb, size);
100 fprintf (stderr, "Error: calloc failed. Out of memory. Aborting.\n");
108 xrealloc (void *ptr, size_t size)
112 ret = realloc (ptr, size);
115 fprintf (stderr, "Error: realloc failed: Out of memory. Aborting.\n");
123 xfdopen (int filedes, const char *mode)
127 ret = fdopen (filedes, mode);
130 fprintf (stderr, "Error: fdopen failed: %s. Aborting.\n",
139 xfreopen (const char *path, const char *mode, FILE *stream)
143 ret = freopen (path, mode, stream);
145 fprintf (stderr, "Error: freopen of %s failed: %s. Aborting.\n",
146 path, strerror (errno));
154 xstrdup (const char *s)
161 fprintf (stderr, "Error: strdup failed: %s. Aborting.\n",
170 xfwrite (const void *ptr, size_t size, size_t nmemb, FILE *stream)
174 ret = fwrite (ptr, size, nmemb, stream);
176 fprintf (stderr, "Error: error occured during fwrite. Aborting.\n");
182 xsocket (int domain, int type, int protocol)
186 ret = socket (domain, type, protocol);
188 fprintf (stderr, "Error: socket failed: %s. Aborting.\n",
197 xbind (int sockfd, const struct sockaddr *my_addr, socklen_t addrlen)
201 ret = bind (sockfd, my_addr, addrlen);
203 fprintf (stderr, "Error: bind failed: %s. Aborting.\n",
210 xlisten (int s, int backlog)
214 ret = listen (s, backlog);
216 fprintf (stderr, "Error: listen failed: %s. Aborting.\n",
223 xfcntl (int fd, int cmd, long arg)
227 ret = fcntl (fd, cmd, arg);
229 fprintf (stderr, "Error: fcntl failed: %s. Aborting.\n",
242 struct timeval *timeout)
246 ret = select (n, readfds, writefds, exceptfds, timeout);
248 fprintf (stderr, "Error: select failed: %s. Aborting.\n",