string.c

Go to the documentation of this file.
00001 /* string.c */
00002 
00003 #include "../../include/system.h"
00004 #include "../../include/string.h"
00005 
00006 int strcmp(const char *s1, const char *s2)
00007 {
00008  int i;
00009  int retorno=-1;
00010 
00011  for ( i=0; (*s1 == *s2); i++, s1++, s2++) {
00012   if ( ( *s1 == '\0' ) | ( *s1 == '\n' ) ) {
00013    retorno=0;
00014    break;
00015   }
00016  }
00017 
00018  return retorno;
00019 }
00020 
00021 
00022 size_t strlen(const char *s)
00023 {
00024  size_t cantidad = 0;
00025  
00026  for ( cantidad=0; *(s+cantidad) ; cantidad++) ;
00027 
00028  return cantidad;
00029 }
00030 
00031 char *strcat(char *dest, char *src) 
00032 {
00033     char *dest_aux = dest + strlen(dest);
00034 
00035     while (*src) 
00036         *dest_aux++ = *src++;
00037 
00038     return dest;
00039 }       
00040 
00041 
00042 char *strcpy (char *dest, const char *src) 
00043 {
00044     while ( *src) {
00045         *dest++=*src++;
00046     }
00047     *dest='\0';
00048     return dest;
00049 }
00050 
00051 char *strncpy (char *dest, const char *src, size_t nbytes) 
00052 {
00053     while ( *src && nbytes) {
00054         *dest++=*src++;
00055         nbytes--;
00056     }
00057     *dest='\0';
00058     return dest;
00059 }
00060 
00061 
00063 // Convierte un string a mayusculas
00065 char *str_to_upper (char *str)
00066 {
00067     char *str_ret = str;
00068     while ( *str ) {
00069         if ( (*str >= 'a') && (*str <= 'z') )
00070             *str-=32;
00071     
00072         str++;
00073     }
00074     return str_ret;
00075 }       
00076 
00077 int memcmp( const void *s1, const void *s2, dword n)
00078 {
00079     byte *s22 = (byte *) s2;
00080     byte *s11 = (byte *) s1;
00081         
00082     while (n--) {
00083         if (   *s11 != *s22 )
00084             return (int) (s11-s22);
00085         s22++;s11++;
00086     }
00087             
00088     return 0;
00089 }       
00090 
00091 /*
00092 void memcpy( void *dest, const void *src, dword n)
00093 {
00094     byte *dest1 = (char *)dest;
00095     byte *src1 = (char *)src;
00096 
00097     while (n--)
00098         *dest1++ = *src1++;
00099         
00100     return dest;
00101 }       
00102 */
00103 
00104 // Decidi escribir esta funcion de este modo al ver que el tiempo de ejecucion era entre 2 y 10 veces menor que
00105 // el clasico codigo en C, sin sacrificar ningun tipo de comprobaciones. Influye tambien que esta funcion puede ser
00106 // usada, entre otras cosas, para copiar paginas completas como ser el caso del directorio de paginas el cual sera
00107 // duplicado por cada nueva tarea creada.
00108 
00109 void *memcpy( void *dest, const void *src, dword n)
00110 {
00111     __asm__("push %%ecx; push %%edi ; push %%esi ;cld ; rep ; movsb ; pop %%esi ; pop %%edi ; pop %%ecx" \
00112                     :  : "c" ((word) n), "S" (src), "D" (dest));
00113     
00114     return dest;
00115 }
00116 
00117 
00118 

Generated on Sun May 30 18:38:35 2004 for Routix OS by doxygen 1.3.6