//+---------------------------------------------------------------------------- // // File: string.c // // Module: // // Synopsis: // // Copyright (C) 2003 Scott Gasch // // Created: sgasch 5 Jul 2003 // //+---------------------------------------------------------------------------- #include "kernel.h" CHAR * strncpy(CHAR *pDest, CHAR *pSrc, SIZE_T u) { char *p = pDest; ULONG v = 0; while ((v < u) && (*pSrc)) { *pDest = *pSrc; pDest++; pSrc++; v++; } // // If we ran out of space, null terminate the dest buffer // if ((*pSrc) && (u > 0)) { *(pDest - 1) = 0; } return(p); } SIZE_T strlen(CHAR *p) { ULONG i = 0; while(*p) { i++; p++; } return(i); } CHAR * RtlIntToAscii(INT i, CHAR *buf, ULONG uBufLen, ULONG uBase) { CHAR *p = (buf + uBufLen); ULONG uSpaceLeft = uBufLen; ULONG uMagnitude; BOOL fNeg = FALSE; // // null terminate the workspace buffer // if (uSpaceLeft == 0) { return(NULL); } *p = '\0'; p--; uSpaceLeft--; // // Get the int's sign // if (i < 0) { fNeg = TRUE; uMagnitude = -i; } else { uMagnitude = i; } // // Based on base, do the conversion. Build the string backwards from // less significant digits. Stop if we finish or if we run out of // uSpaceLeft. // switch(uBase) { case 10: do { *p = (uMagnitude % 10) + '0'; p--; uSpaceLeft--; uMagnitude /= 10; } while((uSpaceLeft > 0) && (uMagnitude != 0)); break; case 16: do { *p = "0123456789ABCDEF"[uMagnitude & 15]; p--; uSpaceLeft--; uMagnitude >>= 4; } while((uSpaceLeft > 0) && (uMagnitude != 0)); break; case 8: do { *p = (uMagnitude & 7) + '0'; p--; uSpaceLeft--; uMagnitude >>= 3; } while((uSpaceLeft > 0) && (uMagnitude != 0)); break; } if (TRUE == fNeg) { if (uSpaceLeft > 0) { *p = '-'; } } else { p++; } return(p); }