• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Private definitions for libsepol. */
2 
3 /* Endian conversion for reading and writing binary policies */
4 
5 #include <sepol/policydb/policydb.h>
6 
7 
8 #ifdef __APPLE__
9 #include <sys/types.h>
10 #include <machine/endian.h>
11 #else
12 #include <byteswap.h>
13 #include <endian.h>
14 #endif
15 
16 #include <errno.h>
17 #include <dso.h>
18 
19 #ifdef __APPLE__
20 #define __BYTE_ORDER  BYTE_ORDER
21 #define __LITTLE_ENDIAN  LITTLE_ENDIAN
22 #endif
23 
24 #if __BYTE_ORDER == __LITTLE_ENDIAN
25 #define cpu_to_le16(x) (x)
26 #define le16_to_cpu(x) (x)
27 #define cpu_to_le32(x) (x)
28 #define le32_to_cpu(x) (x)
29 #define cpu_to_le64(x) (x)
30 #define le64_to_cpu(x) (x)
31 #else
32 #define cpu_to_le16(x) bswap_16(x)
33 #define le16_to_cpu(x) bswap_16(x)
34 #define cpu_to_le32(x) bswap_32(x)
35 #define le32_to_cpu(x) bswap_32(x)
36 #define cpu_to_le64(x) bswap_64(x)
37 #define le64_to_cpu(x) bswap_64(x)
38 #endif
39 
40 #undef min
41 #define min(a,b) (((a) < (b)) ? (a) : (b))
42 
43 #undef max
44 #define max(a,b) ((a) >= (b) ? (a) : (b))
45 
46 #define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
47 
48 #define is_saturated(x) (x == (typeof(x))-1)
49 #define zero_or_saturated(x) ((x == 0) || is_saturated(x))
50 
51 /* Policy compatibility information. */
52 struct policydb_compat_info {
53 	unsigned int type;
54 	unsigned int version;
55 	unsigned int sym_num;
56 	unsigned int ocon_num;
57 	unsigned int target_platform;
58 };
59 
60 extern struct policydb_compat_info *policydb_lookup_compat(unsigned int version,
61 							   unsigned int type,
62 						unsigned int target_platform);
63 
64 /* Reading from a policy "file". */
65 extern int next_entry(void *buf, struct policy_file *fp, size_t bytes) hidden;
66 extern size_t put_entry(const void *ptr, size_t size, size_t n,
67 		        struct policy_file *fp) hidden;
68 extern int str_read(char **strp, struct policy_file *fp, size_t len) hidden;
69