proxmark3/armsrc/string.c

120 lines
2.5 KiB
C
Raw Normal View History

//-----------------------------------------------------------------------------
// Jonathan Westhues, Sept 2005
//
// This code is licensed to you under the terms of the GNU GPL, version 2 or,
// at your option, any later version. See the LICENSE.txt file for the text of
// the license.
//-----------------------------------------------------------------------------
// Common string.h functions
//-----------------------------------------------------------------------------
2010-02-21 08:10:28 +08:00
#include "string.h"
2018-08-14 05:50:17 +08:00
void *memcpy(void *dest, const void *src, int len)
2010-02-21 08:10:28 +08:00
{
2019-03-10 03:34:41 +08:00
uint8_t *d = dest;
const uint8_t *s = src;
2019-03-10 07:00:59 +08:00
while ((len--) > 0) {
2019-03-10 03:34:41 +08:00
*d = *s;
d++;
s++;
}
return dest;
2010-02-21 08:10:28 +08:00
}
void *memset(void *dest, int c, int len)
{
2019-03-10 03:34:41 +08:00
uint8_t *d = dest;
2019-03-10 07:00:59 +08:00
while ((len--) > 0) {
2019-03-10 03:34:41 +08:00
*d = c;
d++;
}
return dest;
2010-02-21 08:10:28 +08:00
}
2018-08-14 05:50:17 +08:00
int memcmp(const void *av, const void *bv, int len)
2010-02-21 08:10:28 +08:00
{
2019-03-10 03:34:41 +08:00
const uint8_t *a = av;
const uint8_t *b = bv;
2019-03-10 07:00:59 +08:00
while ((len--) > 0) {
if (*a != *b) {
2019-03-10 03:34:41 +08:00
return *a - *b;
}
a++;
b++;
}
return 0;
2010-02-21 08:10:28 +08:00
}
2019-03-10 07:00:59 +08:00
void memxor(uint8_t *dest, uint8_t *src, size_t len)
{
for (; len > 0; len--, dest++, src++)
*dest ^= *src;
2014-09-12 05:23:46 +08:00
}
2010-02-21 08:10:28 +08:00
int strlen(const char *str)
{
2019-03-10 03:34:41 +08:00
int l = 0;
2019-03-10 07:00:59 +08:00
while (*str) {
2019-03-10 03:34:41 +08:00
l++;
str++;
}
return l;
2010-02-21 08:10:28 +08:00
}
2019-03-10 07:00:59 +08:00
char *strncat(char *dest, const char *src, unsigned int n)
2010-02-21 08:10:28 +08:00
{
2019-03-10 03:34:41 +08:00
unsigned int dest_len = strlen(dest);
unsigned int i;
2010-02-21 08:10:28 +08:00
2019-03-10 03:34:41 +08:00
for (i = 0 ; i < n && src[i] != '\0' ; i++)
dest[dest_len + i] = src[i];
dest[dest_len + i] = '\0';
2010-02-21 08:10:28 +08:00
2019-03-10 03:34:41 +08:00
return dest;
2010-02-21 08:10:28 +08:00
}
2019-03-10 07:00:59 +08:00
char *strcat(char *dest, const char *src)
{
2019-03-10 03:34:41 +08:00
unsigned int dest_len = strlen(dest);
unsigned int i;
2019-03-10 03:34:41 +08:00
for (i = 0 ; src[i] != '\0' ; i++)
dest[dest_len + i] = src[i];
dest[dest_len + i] = '\0';
2019-03-10 03:34:41 +08:00
return dest;
}
////////////////////////////////////////// code to do 'itoa'
/* reverse: reverse string s in place */
void strreverse(char s[])
{
int c, i, j;
2019-03-10 07:00:59 +08:00
for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
/* itoa: convert n to characters in s */
void itoa(int n, char s[])
{
int i, sign;
if ((sign = n) < 0) /* record sign */
n = -n; /* make n positive */
i = 0;
do { /* generate digits in reverse order */
s[i++] = n % 10 + '0'; /* get next digit */
} while ((n /= 10) > 0); /* delete it */
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
strreverse(s);
}
//////////////////////////////////////// END 'itoa' CODE