From 7c21a96e9afa3408ca0b459a392275aa0ae77608 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Sun, 27 Nov 2005 23:41:55 +0000 Subject: Initial check-in of (stripped-down) UCL data compression library v 1.01 git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8087 a1c6a512-1295-4272-9138-f99709370657 --- tools/ucl/src/ucl_str.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 tools/ucl/src/ucl_str.c (limited to 'tools/ucl/src/ucl_str.c') diff --git a/tools/ucl/src/ucl_str.c b/tools/ucl/src/ucl_str.c new file mode 100644 index 0000000000..5866fb6377 --- /dev/null +++ b/tools/ucl/src/ucl_str.c @@ -0,0 +1,133 @@ +/* ucl_str.c -- string functions for the the UCL library + + This file is part of the UCL data compression library. + + Copyright (C) 1996-2002 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The UCL library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The UCL library 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the UCL library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Markus F.X.J. Oberhumer + + http://www.oberhumer.com/opensource/ucl/ + */ + + +#include "ucl_conf.h" + +#undef ucl_memcmp +#undef ucl_memcpy +#undef ucl_memmove +#undef ucl_memset + + +/*********************************************************************** +// slow but portable stuff, only used in assertions +************************************************************************/ + +UCL_PUBLIC(int) +ucl_memcmp(const ucl_voidp s1, const ucl_voidp s2, ucl_uint len) +{ +#if (UCL_UINT_MAX <= SIZE_T_MAX) && defined(HAVE_MEMCMP) + return memcmp(s1,s2,len); +#else + const ucl_byte *p1 = (const ucl_byte *) s1; + const ucl_byte *p2 = (const ucl_byte *) s2; + int d; + + if (len > 0) do + { + d = *p1 - *p2; + if (d != 0) + return d; + p1++; + p2++; + } + while (--len > 0); + return 0; +#endif +} + + +UCL_PUBLIC(ucl_voidp) +ucl_memcpy(ucl_voidp dest, const ucl_voidp src, ucl_uint len) +{ +#if (UCL_UINT_MAX <= SIZE_T_MAX) && defined(HAVE_MEMCPY) + return memcpy(dest,src,len); +#else + ucl_byte *p1 = (ucl_byte *) dest; + const ucl_byte *p2 = (const ucl_byte *) src; + + if (len <= 0 || p1 == p2) + return dest; + do + *p1++ = *p2++; + while (--len > 0); + return dest; +#endif +} + + +UCL_PUBLIC(ucl_voidp) +ucl_memmove(ucl_voidp dest, const ucl_voidp src, ucl_uint len) +{ +#if (UCL_UINT_MAX <= SIZE_T_MAX) && defined(HAVE_MEMMOVE) + return memmove(dest,src,len); +#else + ucl_byte *p1 = (ucl_byte *) dest; + const ucl_byte *p2 = (const ucl_byte *) src; + + if (len <= 0 || p1 == p2) + return dest; + + if (p1 < p2) + { + do + *p1++ = *p2++; + while (--len > 0); + } + else + { + p1 += len; + p2 += len; + do + *--p1 = *--p2; + while (--len > 0); + } + return dest; +#endif +} + + +UCL_PUBLIC(ucl_voidp) +ucl_memset(ucl_voidp s, int c, ucl_uint len) +{ +#if (UCL_UINT_MAX <= SIZE_T_MAX) && defined(HAVE_MEMSET) + return memset(s,c,len); +#else + ucl_byte *p = (ucl_byte *) s; + + if (len > 0) do + *p++ = UCL_BYTE(c); + while (--len > 0); + return s; +#endif +} + + +/* +vi:ts=4:et +*/ -- cgit v1.2.3