Index: branches/ErmaC/Enoch/i386/libsa/libsa.h =================================================================== --- branches/ErmaC/Enoch/i386/libsa/libsa.h (revision 2585) +++ branches/ErmaC/Enoch/i386/libsa/libsa.h (revision 2586) @@ -2,7 +2,7 @@ * Copyright (c) 1999-2003 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ - * + * * Portions Copyright (c) 1999-2003 Apple Computer, Inc. All Rights * Reserved. This file contains Original Code and/or Modifications of * Original Code as defined in and that are subject to the Apple Public @@ -10,7 +10,7 @@ * except in compliance with the License. Please obtain a copy of the * License at http://www.apple.com/publicsource and read it before using * this file. - * + * * The Original Code and all software distributed under the License are * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, @@ -18,7 +18,7 @@ * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the * License for the specific language governing rights and limitations * under the License. - * + * * @APPLE_LICENSE_HEADER_END@ */ @@ -89,71 +89,72 @@ #error bzero is defined. #endif -extern void * memset(void * dst, int c, size_t n); -extern void * memcpy(void * dst, const void * src, size_t len); -extern int memcmp(const void * p1, const void * p2, size_t len); -extern int strcmp(const char * s1, const char * s2); -extern int strncmp(const char * s1, const char * s2, size_t n); -extern char * strcpy(char * s1, const char * s2); -extern char * stpcpy(char * s1, const char * s2); -extern char * strncpy(char * s1, const char * s2, size_t n); -extern char * strpcpy(char * s1, const char * s2, size_t n); -extern size_t strlcpy(char * s1, const char * s2, size_t n); -extern char * strstr(const char *in, const char *str); -extern int atoi(const char * str); -extern int ptol(const char * str); -extern size_t strlen(const char * str); -extern char * strcat(char * s1, const char * s2); -extern char * strncat(char * s1, const char * s2, size_t n); -extern char * strdup(const char *s1); +extern void *memset(void * dst, int c, size_t n); +extern void *memcpy(void * dst, const void * src, size_t len); +extern int memcmp(const void * p1, const void * p2, size_t len); +extern int strcmp(const char * s1, const char * s2); +extern int strncmp(const char * s1, const char * s2, size_t n); +extern char *strcpy(char * s1, const char * s2); +extern char *stpcpy(char * s1, const char * s2); +extern char *strncpy(char * s1, const char * s2, size_t n); +extern char *strpcpy(char * s1, const char * s2, size_t n); +extern size_t strlcpy(char * s1, const char * s2, size_t n); +extern char *strstr(const char *in, const char *str); +extern int atoi(const char * str); +extern int ptol(const char * str); +extern size_t strlen(const char * str); +extern size_t strlcat(char *, const char *, size_t); +extern char *strcat(char * s1, const char * s2); +extern char *strncat(char * s1, const char * s2, size_t n); +extern char *strdup(const char *s1); #if STRNCASECMP extern int strncasecmp(const char *s1, const char *s2, size_t n); #endif -extern char * strchr(const char *str, int c); -extern char * strbreak(const char *str, char **next, long *len); +extern char *strchr(const char *str, int c); +extern char *strbreak(const char *str, char **next, long *len); extern uint8_t checksum8( void * start, unsigned int length ); /* * error.c */ -extern int errno; -extern char * strerror(int errnum); +extern int errno; +extern char *strerror(int errnum); /* * strtol.c */ -extern long strtol(const char * nptr, char ** endptr, int base); -extern unsigned long strtoul(const char * nptr, char ** endptr, int base); -extern unsigned long long strtouq(const char *nptr, char ** endptr, int base); +extern long strtol(const char *nptr, char **endptr, int base); +extern unsigned long strtoul(const char *nptr, char **endptr, int base); +extern unsigned long long strtouq(const char *nptr, char **endptr, int base); /* * prf.c */ -extern void prf(const char * fmt, va_list ap, int (*putfn_p)(), void * putfn_arg); +extern void prf(const char *fmt, va_list ap, int (*putfn_p)(), void *putfn_arg); /* * printf.c */ -extern int sprintf(char *s, const char * format, ...); -extern int snprintf(char *s, size_t size, const char * format, ...); -extern int slvprintf(char * buffer, int len, const char * fmt, va_list arg); +extern int sprintf(char *s, const char *format, ...); +extern int snprintf(char *s, size_t size, const char *format, ...); +extern int slvprintf(char *buffer, int len, const char *fmt, va_list arg); /* * zalloc.c */ #define malloc(size) safe_malloc(size, __FILE__, __LINE__) -extern void malloc_init(char * start, int size, int nodes, void (*malloc_error)(char *, size_t, const char *, int)); -extern void * safe_malloc(size_t size,const char *file, int line); -extern void free(void * start); -extern void * realloc(void * ptr, size_t size); +extern void malloc_init(char *start, int size, int nodes, void (*malloc_error)(char *, size_t, const char *, int)); +extern void *safe_malloc(size_t size,const char *file, int line); +extern void free(void *start); +extern void *realloc(void *ptr, size_t size); /* * getsegbyname.c */ -extern struct segment_command * getsegbynamefromheader(struct mach_header * mhp, char * segname); +extern struct segment_command *getsegbynamefromheader(struct mach_header *mhp, char *segname); /* * interrupts.c Index: branches/ErmaC/Enoch/i386/libsa/string.c =================================================================== --- branches/ErmaC/Enoch/i386/libsa/string.c (revision 2585) +++ branches/ErmaC/Enoch/i386/libsa/string.c (revision 2586) @@ -25,25 +25,25 @@ #include "libsa.h" -void * memset(void * dst, int val, size_t len) +void *memset(void * dst, int val, size_t len) { - asm volatile ( "rep; stosb" - : "=c" (len), "=D" (dst) - : "0" (len), "1" (dst), "a" (val) - : "memory" ); + asm volatile ( "rep; stosb" + : "=c" (len), "=D" (dst) + : "0" (len), "1" (dst), "a" (val) + : "memory" ); - return dst; + return dst; } #if 0 void * memcpy(void * dst, const void * src, size_t len) { - asm volatile ( "rep; movsb" - : "=c" (len), "=D" (dst), "=S" (src) - : "0" (len), "1" (dst), "2" (src) - : "memory" ); + asm volatile ( "rep; movsb" + : "=c" (len), "=D" (dst), "=S" (src) + : "0" (len), "1" (dst), "2" (src) + : "memory" ); - return dst; + return dst; } void bcopy(const void * src, void * dst, size_t len) @@ -53,73 +53,73 @@ void bzero(void * dst, size_t len) { - memset(dst, 0, len); + memset(dst, 0, len); } void __bzero(void * dst, size_t len) { - memset(dst, 0, len); + memset(dst, 0, len); } #else void * memcpy(void * dst, const void * src, size_t len) { - asm volatile ( "cld \n\t" - "movl %%ecx, %%edx \n\t" - "shrl $2, %%ecx \n\t" - "rep; movsl \n\t" - "movl %%edx, %%ecx \n\t" - "andl $3, %%ecx \n\t" - "rep; movsb \n\t" - : "=D" (dst) - : "c" (len), "D" (dst), "S" (src) - : "memory", "%edx" ); + asm volatile ( "cld \n\t" + "movl %%ecx, %%edx \n\t" + "shrl $2, %%ecx \n\t" + "rep; movsl \n\t" + "movl %%edx, %%ecx \n\t" + "andl $3, %%ecx \n\t" + "rep; movsb \n\t" + : "=D" (dst) + : "c" (len), "D" (dst), "S" (src) + : "memory", "%edx" ); - return dst; + return dst; } void bcopy(const void * src, void * dst, size_t len) { - asm volatile ( "cld \n\t" - "movl %%ecx, %%edx \n\t" - "shrl $2, %%ecx \n\t" - "rep; movsl \n\t" - "movl %%edx, %%ecx \n\t" - "andl $3, %%ecx \n\t" - "rep; movsb \n\t" - : - : "c" (len), "D" (dst), "S" (src) - : "memory", "%edx" ); + asm volatile ( "cld \n\t" + "movl %%ecx, %%edx \n\t" + "shrl $2, %%ecx \n\t" + "rep; movsl \n\t" + "movl %%edx, %%ecx \n\t" + "andl $3, %%ecx \n\t" + "rep; movsb \n\t" + : + : "c" (len), "D" (dst), "S" (src) + : "memory", "%edx" ); } void bzero(void * dst, size_t len) { - asm volatile ( "xorl %%eax, %%eax \n\t" - "cld \n\t" - "movl %%ecx, %%edx \n\t" - "shrl $2, %%ecx \n\t" - "rep; stosl \n\t" - "movl %%edx, %%ecx \n\t" - "andl $3, %%ecx \n\t" - "rep; stosb \n\t" - : - : "c" (len), "D" (dst) - : "memory", "%eax" ); + asm volatile ( "xorl %%eax, %%eax \n\t" + "cld \n\t" + "movl %%ecx, %%edx \n\t" + "shrl $2, %%ecx \n\t" + "rep; stosl \n\t" + "movl %%edx, %%ecx \n\t" + "andl $3, %%ecx \n\t" + "rep; stosb \n\t" + : + : "c" (len), "D" (dst) + : "memory", "%eax" ); } void __bzero(void * dst, size_t len) { - asm volatile ( "xorl %%eax, %%eax \n\t" - "cld \n\t" - "movl %%ecx, %%edx \n\t" - "shrl $2, %%ecx \n\t" - "rep; stosl \n\t" - "movl %%edx, %%ecx \n\t" - "andl $3, %%ecx \n\t" - "rep; stosb \n\t" - : - : "c" (len), "D" (dst) - : "memory", "%eax" ); + asm volatile ( "xorl %%eax, %%eax \n\t" + "cld \n\t" + "movl %%ecx, %%edx \n\t" + "shrl $2, %%ecx \n\t" + "rep; stosl \n\t" + "movl %%edx, %%ecx \n\t" + "andl $3, %%ecx \n\t" + "rep; stosb \n\t" + : + : "c" (len), "D" (dst) + : "memory", "%eax" ); } #endif @@ -178,8 +178,7 @@ return 0; } -char * -strcpy(char * s1, const char * s2) +char *strcpy(char *s1, const char *s2) { register char *ret = s1; while ((*s1++ = *s2++)) @@ -187,8 +186,7 @@ return ret; } -char * -stpcpy(char * s1, const char * s2) +char *stpcpy(char *s1, const char *s2) { while ((*s1++ = *s2++)) { @@ -197,8 +195,7 @@ return --s1; } -char * -strncpy(char * s1, const char * s2, size_t n) +char *strncpy(char *s1, const char *s2, size_t n) { register char *ret = s1; while (n && (*s1++ = *s2++)) @@ -210,8 +207,7 @@ return ret; } -char * -stpncpy(char * s1, const char * s2, size_t n) +char *stpncpy(char *s1, const char *s2, size_t n) { while (n && (*s1++ = *s2++)) --n; @@ -222,8 +218,7 @@ return s1; } -char * -strstr(const char *in, const char *str) +char *strstr(const char *in, const char *str) { char c; size_t len; @@ -246,8 +241,7 @@ return (char *) (in - 1); } -int -ptol(const char *str) +int ptol(const char *str) { register int c = *str; @@ -259,8 +253,7 @@ return c; } -int -atoi(const char *str) +int atoi(const char *str) { register int sum = 0; while (*str == ' ' || *str == '\t') @@ -271,7 +264,48 @@ } return sum; } +/* + * Appends src to string dst of size siz (unlike strncat, siz is the + * full size of dst, not space left). At most siz-1 characters + * will be copied. Always NUL terminates (unless siz <= strlen(dst)). + * Returns strlen(src) + MIN(siz, strlen(initial dst)). + * If retval >= siz, truncation occurred. + */ +size_t strlcat(char *dst, const char *src, size_t siz) +{ + char *d = dst; + const char *s = src; + size_t n = siz; + size_t dlen; + /* Find the end of dst and adjust bytes left but don't go past end */ + while (n-- != 0 && *d != '\0') + { + d++; + } + + dlen = d - dst; + n = siz - dlen; + + if (n == 0) + { + return(dlen + strlen(s)); + } + + while (*s != '\0') + { + if (n != 1) + { + *d++ = *s; + n--; + } + s++; + } + *d = '\0'; + + return(dlen + (s - src)); /* count does not include NUL */ +} + char *strncat(char *s1, const char *s2, size_t n) { register char *ret = s1; @@ -308,7 +342,7 @@ } #endif -char* strchr(const char *str, int c) +char *strchr(const char *str, int c) { do { @@ -318,9 +352,9 @@ while(*(str++)); return 0; -} - -char* strbreak(const char *str, char **next, long *len) +} + +char *strbreak(const char *str, char **next, long *len) { char *start = (char*)str, *end; bool quoted = false; @@ -358,13 +392,14 @@ } /* COPYRIGHT NOTICE: checksum8 from AppleSMBIOS */ -uint8_t checksum8( void * start, unsigned int length ) +uint8_t checksum8( void *start, unsigned int length ) { uint8_t csum = 0; uint8_t * cp = (uint8_t *) start; unsigned int i; - for ( i = 0; i < length; i++) { + for ( i = 0; i < length; i++) + { csum += *cp++; } return csum;