3 #include "../../include/system.h"
4 #include "../../include/string.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 *strcat(char *dest
, char *src
)
33 char *dest_aux
= dest
+ strlen(dest
);
42 char *strcpy (char *dest
, const char *src
)
51 char *strncpy (char *dest
, const char *src
, size_t nbytes
)
53 while ( *src
&& nbytes
) {
62 //////////////////////////////////////////////////////////////////////////////////////////////////////
63 // Convierte un string a mayusculas
64 //////////////////////////////////////////////////////////////////////////////////////////////////////
65 char *str_to_upper (char *str
)
69 if ( (*str
>= 'a') && (*str
<= 'z') )
77 int memcmp( const void *s1
, const void *s2
, dword n
)
79 byte
*s22
= (byte
*) s2
;
80 byte
*s11
= (byte
*) s1
;
84 return (int) (s11
-s22
);
92 void memcpy( void *dest, const void *src, dword n)
94 byte *dest1 = (char *)dest;
95 byte *src1 = (char *)src;
104 // Decidi escribir esta funcion de este modo al ver que el tiempo de ejecucion era entre 2 y 10 veces menor que
105 // el clasico codigo en C, sin sacrificar ningun tipo de comprobaciones. Influye tambien que esta funcion puede ser
106 // usada, entre otras cosas, para copiar paginas completas como ser el caso del directorio de paginas el cual sera
107 // duplicado por cada nueva tarea creada.
109 void *memcpy( void *dest
, const void *src
, dword n
)
111 __asm__("push %%ecx; push %%edi ; push %%esi ;cld ; rep ; movsb ; pop %%esi ; pop %%edi ; pop %%ecx" \
112 : : "c" ((word
) n
), "S" (src
), "D" (dest
));