2 * This file is part of libFirm.
3 * Copyright (C) 2012 Universitaet Karlsruhe
14 #include <netinet/in.h>
18 #include "lpp_cmd.def"
23 #define BASIC_ERR_CHECK(expr,cond,fmt,last) \
25 fprintf(stderr, "%s(%d): %s %s: ", __FILE__, __LINE__, #expr, #cond); \
27 fprintf(stderr, "\n"); \
31 #define BASIC_ERRNO_CHECK(expr,cond,last) \
33 fprintf(stderr, "%s(%d): %s %s: %s\n", \
34 __FILE__, __LINE__, #expr, #cond, strerror(errno)); \
38 #define ERR_CHECK_RETURN(expr, cond, fmt, retval) \
39 BASIC_ERR_CHECK(expr, cond, fmt, return retval)
41 #define ERRNO_CHECK_RETURN(expr, cond, retval) \
42 BASIC_ERRNO_CHECK(expr, cond, return retval)
44 #define ERR_CHECK_RETURN_VOID(expr, cond, fmt) \
45 BASIC_ERR_CHECK(expr, cond, fmt, return)
47 #define ERRNO_CHECK_RETURN_VOID(expr, cond) \
48 BASIC_ERRNO_CHECK(expr, cond, return)
50 #define ERR_CHECK(expr, cond, fmt) \
51 BASIC_ERR_CHECK(expr, cond, fmt, (void) 0)
53 #define ERRNO_CHECK(expr, cond) \
54 BASIC_ERRNO_CHECK(expr, cond, (void) 0)
56 static void print_err(const char *fmt, ...)
61 vfprintf(stderr, fmt, args);
65 static void writel(int fd, uint32_t x)
68 ERRNO_CHECK(write(fd, &x, sizeof(x)), == -1);
71 static void writed(int fd, double dbl)
73 ERRNO_CHECK(write(fd, &dbl, sizeof(dbl)), == -1);
76 static void writes(int fd, const char *str)
78 size_t n = strlen(str);
80 ERRNO_CHECK(write(fd, str, n), == -1);
83 static uint32_t readl(int fd)
87 ERRNO_CHECK(read(fd, &res, sizeof(res)), == -1);
91 static double readd(int fd)
94 ERRNO_CHECK(read(fd, &res, sizeof(res)), == -1);
98 static char *reads(int fd)
100 size_t len = readl(fd);
101 char *res = malloc(sizeof(char) * (len + 1));
103 ERRNO_CHECK(read(fd, res, len), == -1);
108 static char *readbuf(int fd, size_t buflen, char *buf)
112 size_t n = buflen - 1;
113 size_t len = readl(fd);
114 size_t max_read = n < len ? n : len;
115 size_t rest = len - max_read;
117 if(buflen > 0 && buf != NULL) {
118 ERRNO_CHECK(read(fd, buf, max_read), == -1);
119 buf[max_read] = '\0';
122 /* eat up data that didnt fit into the string */
123 for(i = 0, n = rest / sizeof(dummy); i < n; ++i)
124 read(fd, dummy, sizeof(dummy));
126 if(rest % sizeof(dummy) > 0)
127 read(fd, dummy, rest % sizeof(dummy));
132 static int ack(int fd, size_t buflen, char *buf)
142 readbuf(fd, buflen, buf);
150 static void send_res(int fd, int ok, const char *fmt, ...)
157 vsnprintf(buf, sizeof(buf), fmt, args);
160 writel(fd, LPP_CMD_BAD);
165 writel(fd, LPP_CMD_OK);
168 static void send_ack(int fd)