...
|
...
|
@@ -40,6 +40,7 @@
|
40
|
40
|
* 2005-11-29 reverse_hex2int/int2reverse_hex switched to unsigned int (andrei)
|
41
|
41
|
* 2005-12-09 added msgid_var (andrei)
|
42
|
42
|
* 2007-05-14 added get_sys_ver() (andrei)
|
|
43
|
+ * 2007-06-05 added MAX_UVAR_VALUE(), MAX_int(a,b) MIN_int(a,b) (andrei)
|
43
|
44
|
*/
|
44
|
45
|
|
45
|
46
|
|
...
|
...
|
@@ -117,6 +118,27 @@
|
117
|
118
|
#define ROUND_SHORT(s) ROUND2TYPE(s, short)
|
118
|
119
|
|
119
|
120
|
|
|
121
|
+/* params: v - either a variable name, structure member or a type
|
|
122
|
+ * returns an unsigned long containing the maximum possible value that will
|
|
123
|
+ * fit in v, if v is unsigned or converted to an unsigned version
|
|
124
|
+ * example: MAX_UVAR_VALUE(unsigned short); MAX_UVAR_VALUE(i);
|
|
125
|
+ * MAX_UVAR_VALUE(((struct foo*)0)->bar) */
|
|
126
|
+#define MAX_UVAR_VALUE(v) \
|
|
127
|
+ (((unsigned long)(-1))>>((sizeof(unsigned long)-sizeof(v))*8UL))
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+#define MIN_int(a, b) (((a)<(b))?(a):(b))
|
|
131
|
+#define MAX_int(a, b) (((a)>(b))?(a):(b))
|
|
132
|
+
|
|
133
|
+#if 0
|
|
134
|
+#define MIN_int(a, b) ((b)+(((a)-(b))& -((a)<(b))))
|
|
135
|
+#define MAX_int(a, b) ((a)-(((a)-(b))& -((b)>(a))))
|
|
136
|
+
|
|
137
|
+/* depend on signed right shift result which depends on the compiler */
|
|
138
|
+#define MIN_int(a, b) ((b)+(((a)-(b))&(((a)-(b))>>(sizeof(int)*8-1))))
|
|
139
|
+#define MAX_int(a, b) ((a)-(((a)-(b))&(((a)-(b))>>(sizeof(int)*8-1))))
|
|
140
|
+#endif
|
|
141
|
+
|
120
|
142
|
|
121
|
143
|
/* links a value to a msgid */
|
122
|
144
|
struct msgid_var{
|