[IRC-DEV] Un posible cleanup del s_bdd.c

RyDeN - RedHispana.Org ryden at redhispana.org
Sun Nov 9 06:25:32 CET 2003


Buenas. Si os fijais en el s_bdd.c cuando se va a buscar un registro, se
pasa antes la clave por tolower para asegurarnos que el strcmp retorne 0 en
comparaciones como "[^RyDeN^]" y "{~RyDeN~}". Pero para hacer esto, ha de
pasar por una serie de operaciones tales como comparaciones, de vez en
cuando un malloc, free, un bucle que recorre la cadena... etc. Lo que yo
propongo es algo que el ircd actual de undernet tiene, la funcion es la
siguiente:

int ircd_strcmp(const char *a, const char *b)
{
  const char* ra = a;
  const char* rb = b;
  while (ToLower(*ra) == ToLower(*rb)) {
    if (!*ra++)
      return 0;
    else
      ++rb;
  }
  return (*ra - *rb);
}

Gracias a esta funcion, evitas todos los pasos anteriores y practicamente
consumes la misma cantidad de CPU que con un simple strcmp, pero mucha menos
que la que consume actualmente el IRCD de IRC-Hispano. Salu2.


 ____            ____           _   _
|  _ \   _   _  |  _ \    ___  | \ | |
| |_) | | | | | | | | |  / _ \ |  \| |
|  _ <  | |_| | | |_| | |  __/ | |\  |
|_| \_\  \__, | |____/   \___| |_| \_|
         |___/
La enfermedad del ignorante es ignorar su propia ignorancia. (Alcott, Amos
Bronson)





More information about the IRC-Dev mailing list