[apparmor] Rev 2456: Unify escape sequence processing into a set of library fns.
Steve Beattie
steve at nxnw.org
Thu Apr 17 06:08:39 UTC 2014
Unfortunately, this patch breaks builds on i386, with the following
failure:
g++ -g -O2 -pipe -Wall -Wsign-compare -Wmissing-field-initializers -Wformat-security -Wunused-parameter -std=gnu++0x -D_GNU_SOURCE -DPACKAGE=\"apparmor-parser\" -DLOCALEDIR=\"/usr/share/locale\" -DSUBDOMAIN_CONFDIR=\"/etc/apparmor\" -I../libraries/libapparmor//include -c -o lib.o lib.c
lib.c: In function 'int strn_escseq(const char**, const char*, size_t)':
lib.c:236:47: error: no matching function for call to 'min(long unsigned int, size_t&)'
tmp = strntol(*pos, &end, 8, 255, min(3ul, n));
^
This is due to size_t differing in size on i386 and amd64. The
following patch addresses the issue by casting the constant values to
size_t, satisfying C++'s types (and the patch removes the unnecessary
min macro).
Signed-off-by: Steve Beattie <steve at nxnw.org>
=== modified file 'parser/lib.c'
--- parser/lib.c 2014-04-15 21:59:41 +0000
+++ parser/lib.c 2014-04-17 05:40:18 +0000
@@ -233,7 +233,7 @@
return -1;
if (isodigit(**pos)) {
- tmp = strntol(*pos, &end, 8, 255, min(3ul, n));
+ tmp = strntol(*pos, &end, 8, 255, min((size_t) 3ul, n));
if (tmp == 0 && end == *pos) {
/* this should never happen because of isodigit test */
return -1;
@@ -249,7 +249,7 @@
case '"':
return '"';
case 'd':
- tmp = strntol(*pos, &end, 10, 255, min(3ul, n));
+ tmp = strntol(*pos, &end, 10, 255, min((size_t) 3ul, n));
if (tmp == 0 && end == *pos) {
/* \d no valid encoding */
return -1;
@@ -257,7 +257,7 @@
*pos = end;
return tmp;
case 'x':
- tmp = strntol(*pos, &end, 16, 255, min(2ul, n));
+ tmp = strntol(*pos, &end, 16, 255, min((size_t) 2ul, n));
if (tmp == 0 && end == *pos) {
/* \x no valid encoding */
return -1;
=== modified file 'parser/lib.h'
--- parser/lib.h 2014-04-15 21:59:41 +0000
+++ parser/lib.h 2014-04-17 05:41:28 +0000
@@ -3,11 +3,6 @@
#include <dirent.h>
-#define min(a,b) \
- ({ __typeof__ (a) _a = (a); \
- __typeof__ (b) _b = (b); \
- _a < _b ? _a : _b; })
-
int dirat_for_each(DIR *dir, const char *name, void *data,
int (* cb)(DIR *, const char *, struct stat *, void *));
--
Steve Beattie
<sbeattie at ubuntu.com>
http://NxNW.org/~steve/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20140416/4bea1004/attachment.pgp>
More information about the AppArmor
mailing list