3 #include "routix/system.h"
6 int strcmp(const char *s1
, const char *s2
)
11 for ( i
=0; (*s1
== *s2
); i
++, s1
++, s2
++) {
12 if ( ( *s1
== '\0' ) | ( *s1
== '\n' ) ) {
22 size_t strlen(const char *s
)
26 for ( cantidad
=0; *(s
+cantidad
) ; cantidad
++) ;
31 char *strcpy (char *dest
, const char *src
)
40 char *strncpy (char *dest
, const char *src
, size_t nbytes
)
42 while ( *src
&& nbytes
) {
51 char *str_to_upper (char *str
)
56 *str
= (char) toupper(*str
);
60 char *str_to_lower (char *str
)
65 *str
= (char) tolower(*str
);
72 if ( (c
>= 'A') && (c
<= 'Z') )
79 if ( (c
>= 'a') && (c
<= 'z') )
85 int memcmp( const void *s1
, const void *s2
, dword n
)
87 byte
*s22
= (byte
*) s2
;
88 byte
*s11
= (byte
*) s1
;
92 return (int) (s11
-s22
);
100 void memcpy( void *dest, const void *src, dword n)
102 byte *dest1 = (char *)dest;
103 byte *src1 = (char *)src;
112 // Decidi escribir esta funcion de este modo al ver que el tiempo de ejecucion era entre 2 y 10 veces menor que
113 // el clasico codigo en C, sin sacrificar ningun tipo de comprobaciones. Influye tambien que esta funcion puede ser
114 // usada, entre otras cosas, para copiar paginas completas como ser el caso del directorio de paginas el cual sera
115 // duplicado por cada nueva tarea creada.
117 void *memcpy( void *dest
, const void *src
, dword n
)
119 __asm__("push %%ecx; push %%edi ; push %%esi ;cld ; rep ; movsb ; pop %%esi ; pop %%edi ; pop %%ecx" \
120 : : "c" ((word
) n
), "S" (src
), "D" (dest
));
125 void *memset(void *dest
, int c
, size_t n
)
128 char *dst
= (char *) dest
;
129 for (i
=0 ; i
<n
; i
++)