/************************************************************************ * Collection of standard library substitute routines * * * * Copyright (c) 1990-2001, S.R. van den Berg, The Netherlands * * Copyright (c) 1999-2001, Philip Guenther, The United States * * of America * * #include "../README" * ************************************************************************/ #ifdef RCS static /*const*/char rcsid[]= "$Id: sublib.c,v 1.32 2001/08/31 04:54:15 guenther Exp $"; #endif #include "includes.h" #include "sublib.h" #ifdef NOmemmove void*smemmove(To,From,count)void*To;const void*From;register size_t count; #ifdef NObcopy /* silly compromise, throw */ { register char*to=To;register const char*from=From;/*void*old;*/ /*old=to;*/count++;to--;from--; /* away space to be syntactically correct */ if(to<=from) { goto jiasc; do { *++to= *++from; /* copy from above */ jiasc:; } while(--count); } else { to+=count;from+=count; goto jidesc; do { *--to= *--from; /* copy from below */ jidesc:; } while(--count); } return To/*old*/; #else { bcopy(From,To,count); return To; #endif /* NObcopy */ } #endif /* NOmemmove */ #include "shell.h" #ifdef NOstrpbrk char*sstrpbrk(st,del)const char*const st,*del; { const char*f=0,*t; for(f=0;*del;) if((t=strchr(st,*del++))&&(!f||t0) *p++='\0'; } #endif #ifdef NOstrlcat size_t sstrlcat(dst,src,size)char *dst;const char*src;size_t size; { const char*start=dst; if(size>0) { size--; /* reserve space for the NUL */ while(size>0&&*dst) /* skip to the end */ size--,dst++; while(size>0&&*src) /* copy over characters */ size--,*dst++= *src++; *dst='\0'; /* hasta la vista, baby! */ } return dst-start+strlen(src); } size_t sstrlcpy(dst,src,size)char *dst;const char*src;size_t size; { const char*start=dst; if(size>0) { size--; /* reserve space for the NUL */ while(size>0&&*src) /* copy over characters */ size--,*dst++= *src++; *dst='\0'; /* hasta la vista, baby! */ } return dst-start+strlen(src); } #endif #ifdef NOstrerror char *sstrerror(int err) { #ifndef NOsys_errlist extern int sys_nerr;extern char*sys_errlist[]; if(err>=0&&err=36) goto fault; for(;;str++) /* skip leading whitespace */ { switch(*str) { case '\t':case '\n':case '\v':case '\f':case '\r':case ' ': continue; } break; } switch(*str) /* any signs? */ { case '-':sign=1; case '+':str++; } if(*str=='0') /* leading zero(s)? */ { start++; if((i= *++str)=='x'||i=='X') /* leading 0x or 0X? */ if(!base||base==16) base=16,str++; /* hexadecimal all right */ else goto fault; else if(!base) base=8; /* then it is octal */ } else if(!base) base=10; /* or else decimal */ goto jumpin; do { found=1;result=result*base+i;str++; /* start converting */ jumpin: if((i=(unsigned)*str-'0')<10); else if(i-'A'+'0'<='Z'-'A') i-='A'-10-'0'; /* collating sequence dependency! */ else if(i-'a'+'0'<='z'-'a') i-='a'-10-'0'; /* collating sequence dependency! */ else break; /* not of this world */ } while(i