# define STRTOOFF strtol
# define SAFE_STRTOOFF safe_strtol
# define XSTRTOUOFF xstrtoul
-# define OFF_FMT "ld"
+/* usage: printf("size: %"OFF_FMT"d (%"OFF_FMT"x)\n", sz, sz); */
+# define OFF_FMT "l"
# else
/* "long" is too short, need "long long" */
# define STRTOOFF strtoll
# define SAFE_STRTOOFF safe_strtoll
# define XSTRTOUOFF xstrtoull
-# define OFF_FMT "lld"
+# define OFF_FMT "ll"
# endif
#else
# if 0 /* #if UINT_MAX == 0xffffffff */
# define STRTOOFF strtol
# define SAFE_STRTOOFF safe_strtoi
# define XSTRTOUOFF xstrtou
-# define OFF_FMT "d"
+# define OFF_FMT ""
# else
# define STRTOOFF strtol
# define SAFE_STRTOOFF safe_strtol
# define XSTRTOUOFF xstrtoul
-# define OFF_FMT "ld"
+# define OFF_FMT "l"
# endif
#endif
/* scary. better ideas? (but do *test* them first!) */
extern off_t xlseek(int fd, off_t offset, int whence);
extern off_t fdlength(int fd);
+
extern int xsocket(int domain, int type, int protocol);
extern void xbind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
extern void xlisten(int s, int backlog);
extern int xconnect_tcp_v4(struct sockaddr_in *s_addr);
extern struct hostent *xgethostbyname(const char *name);
extern struct hostent *xgethostbyname2(const char *name, int af);
+extern int xsocket_stream_ip4or6(sa_family_t *fp);
+typedef union {
+ struct sockaddr sa;
+ struct sockaddr_in sin;
+#if ENABLE_FEATURE_IPV6
+ struct sockaddr_in6 sin6;
+#endif
+} sockaddr_inet;
+extern int dotted2sockaddr(const char *dotted, struct sockaddr* sp, int socklen);
+extern int create_and_bind_socket_ip4or6(const char *hostaddr, int port);
+extern int setsockopt_reuseaddr(int fd);
+extern int setsockopt_broadcast(int fd);
+
extern char *xstrdup(const char *s);
extern char *xstrndup(const char *s, int n);
extern const char bb_msg_invalid_date[];
extern const char bb_msg_read_error[];
extern const char bb_msg_write_error[];
-extern const char bb_msg_name_longer_than_foo[];
extern const char bb_msg_unknown[];
extern const char bb_msg_can_not_create_raw_socket[];
extern const char bb_msg_perm_denied_are_you_root[];
#define RB_POWER_OFF 0x4321fedc
#endif
-// Make sure we call functions instead of macros.
+/* Make sure we call functions instead of macros. */
#undef isalnum
#undef isalpha
#undef isascii