Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
src/vm/sli.c
- Committer:
- dadaista
- Date:
- 2010-07-21
- Revision:
- 0:14e5e829dffe
File content as of revision 0:14e5e829dffe:
/* # This file is Copyright 2003, 2006, 2007, 2009 Dean Hall. # # This file is part of the PyMite VM. # The PyMite VM is free software: you can redistribute it and/or modify # it under the terms of the GNU GENERAL PUBLIC LICENSE Version 2. # # The PyMite VM is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # A copy of the GNU GENERAL PUBLIC LICENSE Version 2 # is seen in the file COPYING in this directory. */ #undef __FILE_ID__ #define __FILE_ID__ 0x11 /** * \file * \brief Standard Library Interface * * PyMite requires a few functions from a few different * standard C libraries (memory, string, etc). */ #include "pm.h" /** use Duff's Device or simple for-loop for memcpy. */ #define USE_DUFFS_DEVICE 0 #if !HAVE_STRING_H void * sli_memcpy(unsigned char *to, unsigned char const *from, unsigned int n) { unsigned char *tobak; /* Store init value of to */ tobak = to; #if USE_DUFFS_DEVICE if (n > 0) { switch (n & 0x7) do { case 0: *to++ = *from++; case 7: *to++ = *from++; case 6: *to++ = *from++; case 5: *to++ = *from++; case 4: *to++ = *from++; case 3: *to++ = *from++; case 2: *to++ = *from++; case 1: *to++ = *from++; } while ((n -= 8) > 0); } #else for (; n > 0; n--) { *to = *from; from++; to++; } #endif /* USE_DUFFS_DEVICE */ return tobak; } int sli_strlen(char const *s) { char const *si = s; int len = 0; while (*si++) { len++; } return len; } int sli_strcmp(char const *s1, char const *s2) { /* While not at either strings' end and they're same */ while ((*s1 != C_NULL) && (*s2 != C_NULL) && (*s1 == *s2)) { s1++; s2++; } /* Return string difference */ return *s1 - *s2; } int sli_strncmp(char const *s1, char const *s2, unsigned int n) { unsigned int i = 0; if (n == 0) { return 0; } /* Scan n bytes in string */ for (i = 0; i < n; i++) { /* If bytes differ, return difference */ if (s1[i] != s2[i]) { return s1[i] - s2[i]; } } return 0; } #endif /* HAVE_STRING_H */ /* * This function is moved outside of HAVE_STRING_H because the one in string.h * will not accept a null value for the second arg */ void sli_memset(unsigned char *dest, char const val, unsigned int n) { unsigned int i; for (i = 0; i < n; i++) { *dest = (unsigned char)val; dest++; } }