tcpwrapper: Fix signage problems in the tcp_wrappers hash function
authorChuck Lever <chuck.lever@oracle.com>
Sun, 17 Jan 2010 21:50:29 +0000 (16:50 -0500)
committerSteve Dickson <steved@redhat.com>
Sun, 17 Jan 2010 21:50:29 +0000 (16:50 -0500)
Eliminate the following compiler warnings:

tcpwrapper.c:78: warning: no previous prototype for strtoint
tcpwrapper.c: In function strtoint
tcpwrapper.c:81: warning: conversion to int size_t may change the
    sign of the result
tcpwrapper.c:85: warning: conversion to unsigned int from int may
    change the sign of the result
tcpwrapper.c: In function hashint:
tcpwrapper.c:91: warning: conversion to int from unsigned int may
    change the sign of the result

The hash value is probably computed consistently even with
unexpected sign inversions.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
support/misc/tcpwrapper.c

index b981d58..6f65c13 100644 (file)
@@ -75,29 +75,35 @@ hash_head haccess_tbl[HASH_TABLE_SIZE];
 static haccess_t *haccess_lookup(struct sockaddr_in *addr, u_long);
 static void haccess_add(struct sockaddr_in *addr, u_long, int);
 
-inline unsigned int strtoint(char *str)
+static unsigned long
+strtoint(const char *str)
 {
-       unsigned int n = 0;
-       int len = strlen(str);
-       int i;
+       unsigned long i, n = 0;
+       size_t len = strlen(str);
 
-       for (i=0; i < len; i++)
-               n+=((int)str[i])*i;
+       for (i = 0; i < len; i++)
+               n += (unsigned char)str[i] * i;
 
        return n;
 }
-static inline int hashint(unsigned int num)
+
+static unsigned int
+hashint(const unsigned long num)
+{
+       return (unsigned int)(num % HASH_TABLE_SIZE);
+}
+
+static unsigned int
+HASH(const char *addr, const unsigned long program)
 {
-       return num % HASH_TABLE_SIZE;
+       return hashint(strtoint(addr) + program);
 }
-#define HASH(_addr, _prog) \
-       hashint((strtoint((_addr))+(_prog)))
 
 void haccess_add(struct sockaddr_in *addr, u_long prog, int access)
 {
        hash_head *head;
-       haccess_t *hptr;
-       int hash;
+       haccess_t *hptr;
+       unsigned int hash;
 
        hptr = (haccess_t *)malloc(sizeof(haccess_t));
        if (hptr == NULL)
@@ -117,8 +123,8 @@ void haccess_add(struct sockaddr_in *addr, u_long prog, int access)
 haccess_t *haccess_lookup(struct sockaddr_in *addr, u_long prog)
 {
        hash_head *head;
-       haccess_t *hptr;
-       int hash;
+       haccess_t *hptr;
+       unsigned int hash;
 
        hash = HASH(inet_ntoa(addr->sin_addr), prog);
        head = &(haccess_tbl[hash]);