initial commit
[pfinal.git] / Routix / tareas / punto / old / string.c
blob6fffaa440499d608194769a465a8c9be93577c7d
1 /* string.c */
3 #include "../../include/system.h"
4 #include "../../include/string.h"
6 int strcmp(const char *s1, const char *s2)
8 int i;
9 int retorno=-1;
11 for ( i=0; (*s1 == *s2); i++, s1++, s2++) {
12 if ( ( *s1 == '\0' ) | ( *s1 == '\n' ) ) {
13 retorno=0;
14 break;
18 return retorno;
22 size_t strlen(const char *s)
24 size_t cantidad = 0;
26 for ( cantidad=0; *(s+cantidad) ; cantidad++) ;
28 return cantidad;
31 char *strcat(char *dest, char *src)
33 char *dest_aux = dest + strlen(dest);
35 while (*src)
36 *dest_aux++ = *src++;
38 return dest;
42 char *strcpy (char *dest, const char *src)
44 while ( *src) {
45 *dest++=*src++;
47 *dest='\0';
48 return dest;
51 char *strncpy (char *dest, const char *src, size_t nbytes)
53 while ( *src && nbytes) {
54 *dest++=*src++;
55 nbytes--;
57 *dest='\0';
58 return dest;
62 //////////////////////////////////////////////////////////////////////////////////////////////////////
63 // Convierte un string a mayusculas
64 //////////////////////////////////////////////////////////////////////////////////////////////////////
65 char *str_to_upper (char *str)
67 char *str_ret = str;
68 while ( *str ) {
69 if ( (*str >= 'a') && (*str <= 'z') )
70 *str-=32;
72 str++;
74 return str_ret;
77 int memcmp( const void *s1, const void *s2, dword n)
79 byte *s22 = (byte *) s2;
80 byte *s11 = (byte *) s1;
82 while (n--) {
83 if ( *s11 != *s22 )
84 return (int) (s11-s22);
85 s22++;s11++;
88 return 0;
92 void memcpy( void *dest, const void *src, dword n)
94 byte *dest1 = (char *)dest;
95 byte *src1 = (char *)src;
97 while (n--)
98 *dest1++ = *src1++;
100 return dest;
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));
114 return dest;