diff -Naur libcap-1.10.blfs.diff9/libcap/cap_extint.c libcap-1.10/libcap/cap_extint.c --- libcap-1.10.blfs.diff9/libcap/cap_extint.c 1999-04-17 18:16:31.000000000 -0400 +++ libcap-1.10/libcap/cap_extint.c 2007-05-25 15:17:07.000000000 -0400 @@ -16,8 +16,8 @@ * length (void *)) */ #define CAP_EXT_MAGIC "\220\302\001\121" -#define CAP_EXT_MAGIC_SIZE 4 -const static __u8 external_magic[CAP_EXT_MAGIC_SIZE+1] = CAP_EXT_MAGIC; +#define CAP_EXT_MAGIC_SIZE 4UL +static const __u8 external_magic[CAP_EXT_MAGIC_SIZE+1] = CAP_EXT_MAGIC; struct cap_ext_struct { __u8 magic[CAP_EXT_MAGIC_SIZE]; @@ -31,7 +31,7 @@ * return size of external capability set */ -ssize_t cap_size(cap_t caps) +ssize_t cap_size(cap_t __attribute__ ((unused)) caps) { return sizeof(struct cap_ext_struct); } @@ -49,7 +49,8 @@ int i; /* valid arguments? */ - if (!good_cap_t(cap_d) || length < sizeof(struct cap_ext_struct) + if (!good_cap_t(cap_d) || length < 0 + || (size_t) length < sizeof(struct cap_ext_struct) || cap_ext == NULL) { errno = EINVAL; return -1; @@ -60,7 +61,7 @@ result->length_of_capset = CAP_SET_SIZE; for (i=0; iset; + unsigned int set, blen; + __u32 * to; /* Does the external representation make sense? */ if (export == NULL || !memcmp(export->magic, external_magic @@ -105,9 +106,10 @@ return NULL; blen = export->length_of_capset; + to = (__u32 *) &cap_d->set; for (set=0; set<=NUMBER_OF_CAP_SETS; ++set) { - int blk; - int bno = 0; + unsigned int blk; + unsigned int bno = 0; for (blk=0; blk<(CAP_SET_SIZE/4); ++blk) { __u32 val = 0; diff -Naur libcap-1.10.blfs.diff9/libcap/cap_flag.c libcap-1.10/libcap/cap_flag.c --- libcap-1.10.blfs.diff9/libcap/cap_flag.c 1999-04-17 18:16:31.000000000 -0400 +++ libcap-1.10/libcap/cap_flag.c 2007-05-25 15:17:58.000000000 -0400 @@ -26,7 +26,7 @@ */ if (raised && good_cap_t(cap_d) && value >= 0 && value < __CAP_BITS - && set >= 0 && set < NUMBER_OF_CAP_SETS) { + && (int) set >= 0 && set < NUMBER_OF_CAP_SETS) { __cap_s *cap_p = (__cap_s *) (set*CAP_SET_SIZE + (__u8 *) &cap_d->set); @@ -56,7 +56,7 @@ */ if (good_cap_t(cap_d) && no_values > 0 && no_values <= __CAP_BITS - && (set >= 0) && (set < NUMBER_OF_CAP_SETS) + && (int) set >= 0 && set < NUMBER_OF_CAP_SETS && (raise == CAP_SET || raise == CAP_CLEAR) ) { int i; for (i=0; i 0) { - int j = read(STDIN_FILENO, buffer, i); + while (size > 0) { + ssize_t j = read(STDIN_FILENO, buffer, size); if (j < 0) { fprintf(stderr, "\n[Error - aborting]\n"); @@ -53,14 +51,14 @@ /* move on... */ - i -= j; + size -= j; buffer += j; } /* terminate */ buffer[0] = '\0'; - return (i < MAXCAP ? 0:-1); + return (size < MAXCAP ? 0 : -1); } int main(int argc, char **argv) @@ -82,7 +80,7 @@ continue; } if (!strcmp(*argv,"-")) { - retval = read_caps(quiet, *argv, buffer); + retval = read_caps(quiet, buffer, sizeof(buffer)-1); if (retval) usage(); text = buffer;