brianp      02/05/04 22:48:28

  Modified:    network_io/unix inet_ntop.c
  Log:
  Some performance fixes for inet_ntop6()
  
  Revision  Changes    Path
  1.14      +11 -3     apr/network_io/unix/inet_ntop.c
  
  Index: inet_ntop.c
  ===================================================================
  RCS file: /home/cvs/apr/network_io/unix/inet_ntop.c,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- inet_ntop.c       12 Feb 2002 21:57:12 -0000      1.13
  +++ inet_ntop.c       5 May 2002 05:48:28 -0000       1.14
  @@ -150,15 +150,23 @@
        struct { int base, len; } best, cur;
        unsigned int words[IN6ADDRSZ / INT16SZ];
        int i;
  +        const unsigned char *next_src, *src_end;
  +        unsigned int *next_dest;
   
        /*
         * Preprocess:
         *      Copy the input (bytewise) array into a wordwise array.
         *      Find the longest run of 0x00's in src[] for :: shorthanding.
         */
  -     memset(words, '\0', sizeof words);
  -     for (i = 0; i < IN6ADDRSZ; i++)
  -             words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
  +        next_src = src;
  +        src_end = src + IN6ADDRSZ;
  +        next_dest = words;
  +        do {
  +            unsigned int next_word = (unsigned int)*next_src++;
  +            next_word <<= 8;
  +            next_word |= (unsigned int)*next_src++;
  +            *next_dest++ = next_word;
  +        } while (next_src < src_end);
        best.base = -1;
        cur.base = -1;
        for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) {
  
  
  

Reply via email to