我在库中的socklen_t有一个冲突的typedef我正在尝试构建来自ndk-path / platforms / android-19 / arch-arm / usr / include / sys / socket.h的包含文件。
库有typedef uint32_t socklen_t
但包含sys / socket.h,它将typedefs为int。我可以使库使用sys / socket.h版本(int)或在socket.h头文件中重新定义它(如下所示)。哪个更安全?我试过联系图书馆的作者,但没有回复。是否更改了socket.h中的定义?
#ifndef _SYS_SOCKET_H_
#define _SYS_SOCKET_H_
#include <sys/cdefs.h>
#include <sys/types.h>
#include <cstdint>
#include <linux/socket.h>
__BEGIN_DECLS
#define SOCK_STREAM 1
#define SOCK_DGRAM 2
#define SOCK_RAW 3
#define SOCK_RDM 4
#define SOCK_SEQPACKET 5
#define SOCK_PACKET 10
#ifdef __i386__
# define __socketcall extern __attribute__((__cdecl__))
#else
# define __socketcall extern
#endif
/* BIONIC: second argument to shutdown() */
enum {
SHUT_RD = 0, /* no more receptions */
#define SHUT_RD SHUT_RD
SHUT_WR, /* no more transmissions */
#define SHUT_WR SHUT_WR
SHUT_RDWR /* no more receptions or transmissions */
#define SHUT_RDWR SHUT_RDWR
};
typedef uint32_t socklen_t;
__socketcall int socket(int, int, int);
__socketcall int bind(int, const struct sockaddr *, int);
__socketcall int connect(int, const struct sockaddr *, socklen_t);
__socketcall int listen(int, int);
__socketcall int accept(int, struct sockaddr *, socklen_t *);
__socketcall int getsockname(int, struct sockaddr *, socklen_t *);
__socketcall int getpeername(int, struct sockaddr *, socklen_t *);
__socketcall int socketpair(int, int, int, int *);
__socketcall int shutdown(int, int);
__socketcall int setsockopt(int, int, int, const void *, socklen_t);
__socketcall int getsockopt(int, int, int, void *, socklen_t *);
__socketcall int sendmsg(int, const struct msghdr *, unsigned int);
__socketcall int recvmsg(int, struct msghdr *, unsigned int);
extern ssize_t send(int, const void *, size_t, unsigned int);
extern ssize_t recv(int, void *, size_t, unsigned int);
__socketcall ssize_t sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t);
__socketcall ssize_t recvfrom(int, void *, size_t, unsigned int, const struct sockaddr *, socklen_t *);
#undef __socketcall
__END_DECLS
#endif /* _SYS_SOCKET_H */
答案 0 :(得分:2)
更改系统包含是一个坏主意,因为系统的其余部分肯定依赖于那里的protoyped / typdefed / declaned / definded。
因此,调整明显不可移植的库代码。