Can someone tell me if this works for a checksum routine?

Thanks

Code:
LOCAL u_short
nic_internet_checksum(                                               /* _FUNC */
          u_short   *pAddr,         
          int        len
        )
  {
    int 	nLeft	= len;
    int 	sum 	= 0;
    u_short *w 	= pAddr;
    u_short	answer;

    while (nLeft > 1)
	{
	sum 	+= *w++;
	nLeft	-= 2;
        if (sum > 1073741824)
          {
            sum = (sum >> 16) + (sum & 0xffff);
          }
	}

    if (nLeft == 1)
	sum += 0 | ((*(u_char *) w) << 8);

    sum = (sum >> 16) + (sum & 0xffff);
    sum += (sum >> 16);
    answer = sum;

    return (~answer & 0xffff);
  }