diff options
author | Sebastian Wilhelmi <wilhelmi@ira.uka.de> | 1999-07-01 09:30:18 +0000 |
---|---|---|
committer | Sebastian Wilhelmi <wilhelmi@src.gnome.org> | 1999-07-01 09:30:18 +0000 |
commit | d610460c2264273b9520c0a932a34431efb56887 (patch) | |
tree | 5e2cc6a36c197a7116a8a24771dbc74b728da498 /gutils.c | |
parent | f80d6cc540d1116f5e04f7ea20a54ecf12ea37a6 (diff) | |
download | glib-d610460c2264273b9520c0a932a34431efb56887.tar.gz |
Added a g_memmove replacement for platforms without memmove, where bcopy
1999-07-01 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* configure.in, acconfig.h, gutils.c: Added a g_memmove
replacement for platforms without memmove, where bcopy can't
handle overlapping copies and the corresponding checks, which is
taken form the PERL Configure routine.
* glib.h: Updated the commentary about g_memmove to be right and
more GLib-like.
* configure.in: Removed test for rand_r, as it isn't used anymore.
Diffstat (limited to 'gutils.c')
-rw-r--r-- | gutils.c | 26 |
1 files changed, 26 insertions, 0 deletions
@@ -81,6 +81,32 @@ const guint glib_micro_version = GLIB_MICRO_VERSION; const guint glib_interface_age = GLIB_INTERFACE_AGE; const guint glib_binary_age = GLIB_BINARY_AGE; +#if !defined (HAVE_MEMMOVE) && !defined (HAVE_WORKING_BCOPY) +void +g_memmove (gpointer dest, gconstpointer src, gulong len) +{ + gchar* destptr = dest; + const gchar* srcptr = src; + if (src + len < dest || dest + len < src) + { + bcopy (src, dest, len); + return; + } + else if (dest <= src) + { + while (len--) + *(destptr++) = *(srcptr++); + } + else + { + destptr += len; + srcptr += len; + while (len--) + *(--destptr) = *(--srcptr); + } +} +#endif /* !HAVE_MEMMOVE && !HAVE_WORKING_BCOPY */ + void g_atexit (GVoidFunc func) { |