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 xfopen (const char *path, const char *mode)
125 ret = fopen (path, mode);
128 fprintf (stderr, "Error: fopen of %s failed: %s. Aborting.\n",
129 path, strerror (errno));
137 xfdopen (int filedes, const char *mode)
141 ret = fdopen (filedes, mode);
144 fprintf (stderr, "Error: fdopen failed: %s. Aborting.\n",
153 xdup2 (int oldfd, int newfd)
157 ret = dup2 (oldfd, newfd);
159 printf ("Error: dup2 failed: %s. Aborting.\n",
166 xstrdup (const char *s)
176 fprintf (stderr, "Error: strdup failed: %s. Aborting.\n",
185 xfwrite (const void *ptr, size_t size, size_t nmemb, FILE *stream)
189 ret = fwrite (ptr, size, nmemb, stream);
191 fprintf (stderr, "Error: error occured during fwrite. Aborting.\n");
197 xsocket (int domain, int type, int protocol)
201 ret = socket (domain, type, protocol);
203 fprintf (stderr, "Error: socket failed: %s. Aborting.\n",
212 xbind (int sockfd, const struct sockaddr *my_addr, socklen_t addrlen)
216 ret = bind (sockfd, my_addr, addrlen);
218 fprintf (stderr, "Error: bind failed: %s. Aborting.\n",
225 xconnect (int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen)
229 ret = connect (sockfd, serv_addr, addrlen);
233 return TTT_STATUS_CONNECTION_REFUSED;
236 return TTT_STATUS_NETWORK_UNREACHABLE;
238 fprintf (stderr, "Error: connect failed (errno = %d): %s. Aborting.\n",
239 errno, strerror (errno));
244 return TTT_STATUS_SUCCESS;
248 xlisten (int s, int backlog)
252 ret = listen (s, backlog);
254 fprintf (stderr, "Error: listen failed: %s. Aborting.\n",
261 xfcntl (int fd, int cmd, long arg)
265 ret = fcntl (fd, cmd, arg);
267 fprintf (stderr, "Error: fcntl failed: %s. Aborting.\n",
280 struct timeval *timeout)
284 ret = select (n, readfds, writefds, exceptfds, timeout);
286 fprintf (stderr, "Error: select failed: %s. Aborting.\n",
295 xread (int fd, void *buf, size_t count)
299 ret = read (fd, buf, count);
301 fprintf (stderr, "Error: read failed: %s. Aborting.\n",
310 xwrite (int fd, const void *buf, size_t count)
314 ret = write (fd, buf, count);
316 fprintf (stderr, "Error: write failed: %s. Aborting.\n",