1*0Sstevel@tonic-gate /* 2*0Sstevel@tonic-gate * CDDL HEADER START 3*0Sstevel@tonic-gate * 4*0Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*0Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 6*0Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 7*0Sstevel@tonic-gate * with the License. 8*0Sstevel@tonic-gate * 9*0Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*0Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 11*0Sstevel@tonic-gate * See the License for the specific language governing permissions 12*0Sstevel@tonic-gate * and limitations under the License. 13*0Sstevel@tonic-gate * 14*0Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 15*0Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*0Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 17*0Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 18*0Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 19*0Sstevel@tonic-gate * 20*0Sstevel@tonic-gate * CDDL HEADER END 21*0Sstevel@tonic-gate */ 22*0Sstevel@tonic-gate /* 23*0Sstevel@tonic-gate * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24*0Sstevel@tonic-gate * Use is subject to license terms. 25*0Sstevel@tonic-gate */ 26*0Sstevel@tonic-gate 27*0Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 28*0Sstevel@tonic-gate 29*0Sstevel@tonic-gate #include <sys/types.h> 30*0Sstevel@tonic-gate #include <sys/param.h> 31*0Sstevel@tonic-gate 32*0Sstevel@tonic-gate /* 33*0Sstevel@tonic-gate * Standalone copies of some basic routines. 34*0Sstevel@tonic-gate */ 35*0Sstevel@tonic-gate 36*0Sstevel@tonic-gate int 37*0Sstevel@tonic-gate strcmp(const char *s1, const char *s2) 38*0Sstevel@tonic-gate { 39*0Sstevel@tonic-gate if (s1 == s2) 40*0Sstevel@tonic-gate return (0); 41*0Sstevel@tonic-gate while (*s1 == *s2++) 42*0Sstevel@tonic-gate if (*s1++ == '\0') 43*0Sstevel@tonic-gate return (0); 44*0Sstevel@tonic-gate return (*s1 - s2[-1]); 45*0Sstevel@tonic-gate } 46*0Sstevel@tonic-gate 47*0Sstevel@tonic-gate /* 48*0Sstevel@tonic-gate * Compare strings (at most n bytes): return *s1-*s2 for the last 49*0Sstevel@tonic-gate * characters in s1 and s2 which were compared. 50*0Sstevel@tonic-gate */ 51*0Sstevel@tonic-gate int 52*0Sstevel@tonic-gate strncmp(const char *s1, const char *s2, size_t n) 53*0Sstevel@tonic-gate { 54*0Sstevel@tonic-gate if (s1 == s2) 55*0Sstevel@tonic-gate return (0); 56*0Sstevel@tonic-gate n++; 57*0Sstevel@tonic-gate while (--n != 0 && *s1 == *s2++) 58*0Sstevel@tonic-gate if (*s1++ == '\0') 59*0Sstevel@tonic-gate return (0); 60*0Sstevel@tonic-gate return ((n == 0) ? 0 : *s1 - *--s2); 61*0Sstevel@tonic-gate } 62*0Sstevel@tonic-gate 63*0Sstevel@tonic-gate size_t 64*0Sstevel@tonic-gate strlen(const char *s) 65*0Sstevel@tonic-gate { 66*0Sstevel@tonic-gate const char *s0 = s + 1; 67*0Sstevel@tonic-gate 68*0Sstevel@tonic-gate while (*s++ != '\0') 69*0Sstevel@tonic-gate ; 70*0Sstevel@tonic-gate return (s - s0); 71*0Sstevel@tonic-gate } 72*0Sstevel@tonic-gate 73*0Sstevel@tonic-gate char * 74*0Sstevel@tonic-gate strcpy(char *s1, const char *s2) 75*0Sstevel@tonic-gate { 76*0Sstevel@tonic-gate char *os1 = s1; 77*0Sstevel@tonic-gate 78*0Sstevel@tonic-gate while (*s1++ = *s2++) 79*0Sstevel@tonic-gate ; 80*0Sstevel@tonic-gate return (os1); 81*0Sstevel@tonic-gate } 82*0Sstevel@tonic-gate 83*0Sstevel@tonic-gate char * 84*0Sstevel@tonic-gate strncpy(char *s1, const char *s2, size_t n) 85*0Sstevel@tonic-gate { 86*0Sstevel@tonic-gate char *os1 = s1; 87*0Sstevel@tonic-gate 88*0Sstevel@tonic-gate n++; 89*0Sstevel@tonic-gate while ((--n != 0) && ((*s1++ = *s2++) != '\0')) 90*0Sstevel@tonic-gate ; 91*0Sstevel@tonic-gate if (n != 0) 92*0Sstevel@tonic-gate while (--n != 0) 93*0Sstevel@tonic-gate *s1++ = '\0'; 94*0Sstevel@tonic-gate return (os1); 95*0Sstevel@tonic-gate } 96*0Sstevel@tonic-gate 97*0Sstevel@tonic-gate char * 98*0Sstevel@tonic-gate strcat(char *s1, const char *s2) 99*0Sstevel@tonic-gate { 100*0Sstevel@tonic-gate char *os1 = s1; 101*0Sstevel@tonic-gate 102*0Sstevel@tonic-gate while (*s1++) 103*0Sstevel@tonic-gate ; 104*0Sstevel@tonic-gate --s1; 105*0Sstevel@tonic-gate while (*s1++ = *s2++) 106*0Sstevel@tonic-gate ; 107*0Sstevel@tonic-gate return (os1); 108*0Sstevel@tonic-gate } 109*0Sstevel@tonic-gate 110*0Sstevel@tonic-gate char * 111*0Sstevel@tonic-gate strchr(const char *sp, int c) 112*0Sstevel@tonic-gate { 113*0Sstevel@tonic-gate 114*0Sstevel@tonic-gate do { 115*0Sstevel@tonic-gate if (*sp == (char)c) 116*0Sstevel@tonic-gate return ((char *)sp); 117*0Sstevel@tonic-gate } while (*sp++); 118*0Sstevel@tonic-gate return (NULL); 119*0Sstevel@tonic-gate } 120*0Sstevel@tonic-gate 121*0Sstevel@tonic-gate void 122*0Sstevel@tonic-gate bzero(void *p_arg, size_t count) 123*0Sstevel@tonic-gate { 124*0Sstevel@tonic-gate char zero = 0; 125*0Sstevel@tonic-gate caddr_t p = p_arg; 126*0Sstevel@tonic-gate 127*0Sstevel@tonic-gate while (count != 0) 128*0Sstevel@tonic-gate *p++ = zero, count--; /* Avoid clr for 68000, still... */ 129*0Sstevel@tonic-gate } 130*0Sstevel@tonic-gate 131*0Sstevel@tonic-gate void 132*0Sstevel@tonic-gate bcopy(const void *src_arg, void *dest_arg, size_t count) 133*0Sstevel@tonic-gate { 134*0Sstevel@tonic-gate caddr_t src = (caddr_t)src_arg; 135*0Sstevel@tonic-gate caddr_t dest = dest_arg; 136*0Sstevel@tonic-gate 137*0Sstevel@tonic-gate if (src < dest && (src + count) > dest) { 138*0Sstevel@tonic-gate /* overlap copy */ 139*0Sstevel@tonic-gate while (--count != -1) 140*0Sstevel@tonic-gate *(dest + count) = *(src + count); 141*0Sstevel@tonic-gate } else { 142*0Sstevel@tonic-gate while (--count != -1) 143*0Sstevel@tonic-gate *dest++ = *src++; 144*0Sstevel@tonic-gate } 145*0Sstevel@tonic-gate } 146