1255e72915d4cbddceb435e13d81601755714e9fSE Android/* Private definitions for libsepol. */
2255e72915d4cbddceb435e13d81601755714e9fSE Android
3255e72915d4cbddceb435e13d81601755714e9fSE Android/* Endian conversion for reading and writing binary policies */
4255e72915d4cbddceb435e13d81601755714e9fSE Android
5255e72915d4cbddceb435e13d81601755714e9fSE Android#include <sepol/policydb/policydb.h>
6255e72915d4cbddceb435e13d81601755714e9fSE Android
7b1db49d77789525ac1f4e73e978e35694f21ea1aStephen Smalley
8b1db49d77789525ac1f4e73e978e35694f21ea1aStephen Smalley#ifdef DARWIN
9b1db49d77789525ac1f4e73e978e35694f21ea1aStephen Smalley#include <sys/types.h>
10b1db49d77789525ac1f4e73e978e35694f21ea1aStephen Smalley#include <machine/endian.h>
11b1db49d77789525ac1f4e73e978e35694f21ea1aStephen Smalley#else
12255e72915d4cbddceb435e13d81601755714e9fSE Android#include <byteswap.h>
13255e72915d4cbddceb435e13d81601755714e9fSE Android#include <endian.h>
14b1db49d77789525ac1f4e73e978e35694f21ea1aStephen Smalley#endif
15b1db49d77789525ac1f4e73e978e35694f21ea1aStephen Smalley
16255e72915d4cbddceb435e13d81601755714e9fSE Android#include <errno.h>
17255e72915d4cbddceb435e13d81601755714e9fSE Android#include <dso.h>
18255e72915d4cbddceb435e13d81601755714e9fSE Android
19b1db49d77789525ac1f4e73e978e35694f21ea1aStephen Smalley#ifdef DARWIN
20b1db49d77789525ac1f4e73e978e35694f21ea1aStephen Smalley#define __BYTE_ORDER  BYTE_ORDER
214ebc669d5dc59771284b2d61eb4cce53e6a7069eStephen Smalley#define __LITTLE_ENDIAN  LITTLE_ENDIAN
22b1db49d77789525ac1f4e73e978e35694f21ea1aStephen Smalley#endif
23b1db49d77789525ac1f4e73e978e35694f21ea1aStephen Smalley
24255e72915d4cbddceb435e13d81601755714e9fSE Android#if __BYTE_ORDER == __LITTLE_ENDIAN
25255e72915d4cbddceb435e13d81601755714e9fSE Android#define cpu_to_le16(x) (x)
26255e72915d4cbddceb435e13d81601755714e9fSE Android#define le16_to_cpu(x) (x)
27255e72915d4cbddceb435e13d81601755714e9fSE Android#define cpu_to_le32(x) (x)
28255e72915d4cbddceb435e13d81601755714e9fSE Android#define le32_to_cpu(x) (x)
29255e72915d4cbddceb435e13d81601755714e9fSE Android#define cpu_to_le64(x) (x)
30255e72915d4cbddceb435e13d81601755714e9fSE Android#define le64_to_cpu(x) (x)
31255e72915d4cbddceb435e13d81601755714e9fSE Android#else
32255e72915d4cbddceb435e13d81601755714e9fSE Android#define cpu_to_le16(x) bswap_16(x)
33255e72915d4cbddceb435e13d81601755714e9fSE Android#define le16_to_cpu(x) bswap_16(x)
34255e72915d4cbddceb435e13d81601755714e9fSE Android#define cpu_to_le32(x) bswap_32(x)
35255e72915d4cbddceb435e13d81601755714e9fSE Android#define le32_to_cpu(x) bswap_32(x)
36255e72915d4cbddceb435e13d81601755714e9fSE Android#define cpu_to_le64(x) bswap_64(x)
37255e72915d4cbddceb435e13d81601755714e9fSE Android#define le64_to_cpu(x) bswap_64(x)
38255e72915d4cbddceb435e13d81601755714e9fSE Android#endif
39255e72915d4cbddceb435e13d81601755714e9fSE Android
40255e72915d4cbddceb435e13d81601755714e9fSE Android#undef min
41255e72915d4cbddceb435e13d81601755714e9fSE Android#define min(a,b) (((a) < (b)) ? (a) : (b))
42255e72915d4cbddceb435e13d81601755714e9fSE Android
43fb82f8ed213dd54eebc6bdd5557984c3ba870496Stephen Smalley#undef max
44fb82f8ed213dd54eebc6bdd5557984c3ba870496Stephen Smalley#define max(a,b) ((a) >= (b) ? (a) : (b))
45fb82f8ed213dd54eebc6bdd5557984c3ba870496Stephen Smalley
46255e72915d4cbddceb435e13d81601755714e9fSE Android#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
47255e72915d4cbddceb435e13d81601755714e9fSE Android
48255e72915d4cbddceb435e13d81601755714e9fSE Android/* Policy compatibility information. */
49255e72915d4cbddceb435e13d81601755714e9fSE Androidstruct policydb_compat_info {
50255e72915d4cbddceb435e13d81601755714e9fSE Android	unsigned int type;
51255e72915d4cbddceb435e13d81601755714e9fSE Android	unsigned int version;
52255e72915d4cbddceb435e13d81601755714e9fSE Android	unsigned int sym_num;
53255e72915d4cbddceb435e13d81601755714e9fSE Android	unsigned int ocon_num;
54255e72915d4cbddceb435e13d81601755714e9fSE Android	unsigned int target_platform;
55255e72915d4cbddceb435e13d81601755714e9fSE Android};
56255e72915d4cbddceb435e13d81601755714e9fSE Android
57255e72915d4cbddceb435e13d81601755714e9fSE Androidextern struct policydb_compat_info *policydb_lookup_compat(unsigned int version,
58255e72915d4cbddceb435e13d81601755714e9fSE Android							   unsigned int type,
59255e72915d4cbddceb435e13d81601755714e9fSE Android						unsigned int target_platform);
60255e72915d4cbddceb435e13d81601755714e9fSE Android
61255e72915d4cbddceb435e13d81601755714e9fSE Android/* Reading from a policy "file". */
62255e72915d4cbddceb435e13d81601755714e9fSE Androidextern int next_entry(void *buf, struct policy_file *fp, size_t bytes) hidden;
63255e72915d4cbddceb435e13d81601755714e9fSE Androidextern size_t put_entry(const void *ptr, size_t size, size_t n,
64255e72915d4cbddceb435e13d81601755714e9fSE Android		        struct policy_file *fp) hidden;
65