* Author: Carl Worth <carl@theworths.org>
*/
-#include "ttt.h"
-
-#include <stdarg.h>
+#include "x.h"
void
xasprintf (char **strp, const char *fmt, ...)
}
FILE *
-xfdopen (int filedes, const char *mode)
+xfopen (const char *path, const char *mode)
{
FILE *ret;
- ret = fdopen (filedes, mode);
+ ret = fopen (path, mode);
if (ret == NULL) {
- fprintf (stderr, "Error: fdopen failed: %s. Aborting.\n",
- strerror (errno));
+ fprintf (stderr, "Error: fopen of %s failed: %s. Aborting.\n",
+ path, strerror (errno));
exit (1);
}
}
FILE *
-xfreopen (const char *path, const char *mode, FILE *stream)
+xfdopen (int filedes, const char *mode)
{
FILE *ret;
- ret = freopen (path, mode, stream);
+ ret = fdopen (filedes, mode);
+
if (ret == NULL) {
- fprintf (stderr, "Error: freopen of %s failed: %s. Aborting.\n",
- path, strerror (errno));
+ fprintf (stderr, "Error: fdopen failed: %s. Aborting.\n",
+ strerror (errno));
exit (1);
}
return ret;
}
+void
+xdup2 (int oldfd, int newfd)
+{
+ int ret;
+
+ ret = dup2 (oldfd, newfd);
+ if (ret == -1) {
+ printf ("Error: dup2 failed: %s. Aborting.\n",
+ strerror (errno));
+ exit (1);
+ }
+}
+
char *
xstrdup (const char *s)
{
char *ret;
+ if (s == NULL)
+ return NULL;
+
ret = strdup (s);
if (ret == NULL) {
}
}
+ttt_status_t
+xconnect (int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen)
+{
+ int ret;
+
+ ret = connect (sockfd, serv_addr, addrlen);
+ if (ret == -1) {
+ switch (errno) {
+ case ECONNREFUSED:
+ return TTT_STATUS_CONNECTION_REFUSED;
+ case EHOSTUNREACH:
+ case ENETUNREACH:
+ return TTT_STATUS_NETWORK_UNREACHABLE;
+ default:
+ fprintf (stderr, "Error: connect failed (errno = %d): %s. Aborting.\n",
+ errno, strerror (errno));
+ exit (1);
+ }
+ }
+
+ return TTT_STATUS_SUCCESS;
+}
+
void
xlisten (int s, int backlog)
{
return ret;
}
+
+ssize_t
+xread (int fd, void *buf, size_t count)
+{
+ int ret;
+
+ ret = read (fd, buf, count);
+ if (ret == -1) {
+ fprintf (stderr, "Error: read failed: %s. Aborting.\n",
+ strerror (errno));
+ exit (1);
+ }
+
+ return ret;
+}
+
+ssize_t
+xwrite (int fd, const void *buf, size_t count)
+{
+ int ret;
+
+ ret = write (fd, buf, count);
+ if (ret == -1) {
+ fprintf (stderr, "Error: write failed: %s. Aborting.\n",
+ strerror (errno));
+ exit (1);
+ }
+
+ return ret;
+}