Changeset 4224 for zzuf/trunk


Ignore:
Timestamp:
Jan 5, 2010, 12:59:14 AM (11 years ago)
Author:
Sam Hocevar
Message:

Avoid useless allocations in the network allow/deny code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • zzuf/trunk/src/libzzuf/network.c

    r4112 r4224  
    115115    ip = get_socket_ip(sock);
    116116
    117     if(deny && host_in_list(ip, deny))
    118         watch = 0;
    119117    if(allow)
    120118        watch = host_in_list(ip, allow);
     119    else if(deny && host_in_list(ip, deny))
     120        watch = 0;
    121121
    122122    return watch;
     
    132132                                      unsigned int *static_list)
    133133{
     134    char buf[BUFSIZ];
     135    struct in_addr addr;
     136    char const *parser;
     137    unsigned int i, chunks, *iplist;
    134138    int ret;
    135     char *copy;
    136     char *parser;
    137     struct in_addr addr;
    138     unsigned int i, chunks, len, *iplist;
    139 
    140     len = strlen(list);
    141     copy = malloc(len + 1);
    142     if (!copy) {
    143         // TODO better error handling
    144         perror("malloc");
    145         exit(EXIT_FAILURE);
    146     }
    147     strncpy(copy, list, len);
    148     copy[len] = 0;
    149139
    150140    /* Count commas */
    151     for(parser = copy, chunks = 1; *parser; parser++)
     141    for(parser = list, chunks = 1; *parser; parser++)
    152142        if(*parser == ',')
    153143            chunks++;
     
    158148        iplist = static_list;
    159149
    160     for(parser = copy, i = 0; i < chunks; i++)
     150    for(i = 0, parser = list; *parser; )
    161151    {
    162152        char *comma = strchr(parser, ',');
    163         if (comma)
    164             *comma = 0;
    165 
    166         ret = inet_aton(parser, &addr);
     153
     154        if (comma && (comma - parser) < BUFSIZ - 1)
     155        {
     156            memcpy(buf, parser, comma - parser);
     157            buf[comma - parser] = '\0';
     158            parser = comma + 1;
     159        }
     160        else if (strlen(parser) < BUFSIZ - 1)
     161        {
     162            strcpy(buf, parser);
     163            parser += strlen(parser);
     164        }
     165        else
     166        {
     167            buf[0] = '\0';
     168            parser++;
     169        }
     170
     171        ret = inet_aton(buf, &addr);
    167172        if (ret)
    168             iplist[i] = addr.s_addr;
    169         else {
    170             i--;
     173            iplist[i++] = addr.s_addr;
     174        else
     175        {
    171176            chunks--;
    172             debug("create_host_list: Invalid IP address '%s'. Skipping it.", parser);
    173         }
    174         parser = comma + 1;
     177            debug("create_host_list: skipping invalid address '%s'", parser);
     178        }
    175179    }
    176180
    177181    iplist[i] = 0;
    178     free(copy);
    179182
    180183    return iplist;
Note: See TracChangeset for help on using the changeset viewer.