mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-24 14:36:13 +01:00
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.
This commit is contained in:
parent
f80d6cc540
commit
d610460c22
12
ChangeLog
12
ChangeLog
@ -1,3 +1,15 @@
|
|||||||
|
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.
|
||||||
|
|
||||||
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
* glib.h, grand.c: Finally removed the g_random_normal and
|
* glib.h, grand.c: Finally removed the g_random_normal and
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
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.
|
||||||
|
|
||||||
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
* glib.h, grand.c: Finally removed the g_random_normal and
|
* glib.h, grand.c: Finally removed the g_random_normal and
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
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.
|
||||||
|
|
||||||
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
* glib.h, grand.c: Finally removed the g_random_normal and
|
* glib.h, grand.c: Finally removed the g_random_normal and
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
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.
|
||||||
|
|
||||||
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
* glib.h, grand.c: Finally removed the g_random_normal and
|
* glib.h, grand.c: Finally removed the g_random_normal and
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
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.
|
||||||
|
|
||||||
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
* glib.h, grand.c: Finally removed the g_random_normal and
|
* glib.h, grand.c: Finally removed the g_random_normal and
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
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.
|
||||||
|
|
||||||
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
* glib.h, grand.c: Finally removed the g_random_normal and
|
* glib.h, grand.c: Finally removed the g_random_normal and
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
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.
|
||||||
|
|
||||||
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
* glib.h, grand.c: Finally removed the g_random_normal and
|
* glib.h, grand.c: Finally removed the g_random_normal and
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
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.
|
||||||
|
|
||||||
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
1999-06-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
* glib.h, grand.c: Finally removed the g_random_normal and
|
* glib.h, grand.c: Finally removed the g_random_normal and
|
||||||
|
@ -69,6 +69,7 @@
|
|||||||
#undef HAVE_VALUES_H
|
#undef HAVE_VALUES_H
|
||||||
#undef HAVE_WCHAR_H
|
#undef HAVE_WCHAR_H
|
||||||
#undef HAVE_WCTYPE_H
|
#undef HAVE_WCTYPE_H
|
||||||
|
#undef HAVE_WORKING_BCOPY
|
||||||
|
|
||||||
#undef NO_FD_SET
|
#undef NO_FD_SET
|
||||||
#undef NO_SYS_ERRLIST
|
#undef NO_SYS_ERRLIST
|
||||||
|
39
configure.in
39
configure.in
@ -306,6 +306,31 @@ AC_CHECK_HEADERS(values.h, AC_DEFINE(HAVE_VALUES_H))
|
|||||||
# Check for some functions
|
# Check for some functions
|
||||||
AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf strcasecmp strncasecmp poll)
|
AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf strcasecmp strncasecmp poll)
|
||||||
|
|
||||||
|
# Check if bcopy can be used for overlapping copies, if memmove isn't found.
|
||||||
|
# The check is borrowed from the PERL Configure script.
|
||||||
|
if test "$ac_cv_func_memmove" != "yes"; then
|
||||||
|
AC_CACHE_CHECK(whether bcopy can handle overlapping copies,
|
||||||
|
glib_cv_working_bcopy,[AC_TRY_RUN([
|
||||||
|
int main() {
|
||||||
|
char buf[128], abc[128], *b;
|
||||||
|
int len, off, align;
|
||||||
|
bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
|
||||||
|
for (align = 7; align >= 0; align--) {
|
||||||
|
for (len = 36; len; len--) {
|
||||||
|
b = buf+align; bcopy(abc, b, len);
|
||||||
|
for (off = 1; off <= len; off++) {
|
||||||
|
bcopy(b, b+off, len); bcopy(b+off, b, len);
|
||||||
|
if (bcmp(b, abc, len)) return(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(0);
|
||||||
|
}],glib_cv_working_bcopy=yes,glib_cv_working_bcopy=no)])
|
||||||
|
if test "$glib_cv_working_bcopy" == "yes"; then
|
||||||
|
AC_DEFINE(HAVE_WORKING_BCOPY)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Check for sys_errlist
|
# Check for sys_errlist
|
||||||
AC_MSG_CHECKING(for sys_errlist)
|
AC_MSG_CHECKING(for sys_errlist)
|
||||||
AC_TRY_LINK(, [
|
AC_TRY_LINK(, [
|
||||||
@ -787,7 +812,7 @@ if test x"$enable_threads" = xyes; then
|
|||||||
# to always be linked with the thread libs on some platforms.
|
# to always be linked with the thread libs on some platforms.
|
||||||
# LIBS="$LIBS $G_THREAD_LIBS"
|
# LIBS="$LIBS $G_THREAD_LIBS"
|
||||||
CFLAGS="$CFLAGS $G_THREAD_CFLAGS"
|
CFLAGS="$CFLAGS $G_THREAD_CFLAGS"
|
||||||
AC_CHECK_FUNCS(localtime_r rand_r)
|
AC_CHECK_FUNCS(localtime_r)
|
||||||
if test "$ac_cv_header_pwd_h" = "yes"; then
|
if test "$ac_cv_header_pwd_h" = "yes"; then
|
||||||
AC_MSG_CHECKING([for getpwuid_r])
|
AC_MSG_CHECKING([for getpwuid_r])
|
||||||
AC_CACHE_VAL(ac_cv_func_getpwuid_r,
|
AC_CACHE_VAL(ac_cv_func_getpwuid_r,
|
||||||
@ -1330,13 +1355,17 @@ x$ac_cv_func_memmove)
|
|||||||
glib_memmove='
|
glib_memmove='
|
||||||
#define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END'
|
#define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END'
|
||||||
;;
|
;;
|
||||||
*)
|
x$glib_cv_working_bcopy)
|
||||||
glib_memmove="
|
glib_memmove="
|
||||||
/* We make the assumption that if memmove isn't available, then
|
/* memmove isn't available, but bcopy can copy overlapping memory regions */
|
||||||
* bcopy will do the job. This isn't safe everywhere. (bcopy can't
|
|
||||||
* necessarily handle overlapping copies) */
|
|
||||||
#define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
|
#define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
|
||||||
;;
|
;;
|
||||||
|
*)
|
||||||
|
glib_memmove="
|
||||||
|
/* memmove isn't found and bcopy can't copy overlapping memory regions,
|
||||||
|
* so we have to roll our own copy routine. */
|
||||||
|
void g_memmove (void* dest, const void * src, unsigned long len);"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
glib_defines="
|
glib_defines="
|
||||||
|
2
glib.h
2
glib.h
@ -58,7 +58,7 @@
|
|||||||
* To register hooks which are executed on exit().
|
* To register hooks which are executed on exit().
|
||||||
* Usually a wrapper for STDC atexit.
|
* Usually a wrapper for STDC atexit.
|
||||||
*
|
*
|
||||||
* void *g_memmove(void *dest, const void *src, guint count);
|
* void g_memmove(gpointer dest, gconstpointer void *src, gulong count);
|
||||||
* A wrapper for STDC memmove, or an implementation, if memmove doesn't
|
* A wrapper for STDC memmove, or an implementation, if memmove doesn't
|
||||||
* exist. The prototype looks like the above, give or take a const,
|
* exist. The prototype looks like the above, give or take a const,
|
||||||
* or size_t.
|
* or size_t.
|
||||||
|
@ -58,7 +58,7 @@
|
|||||||
* To register hooks which are executed on exit().
|
* To register hooks which are executed on exit().
|
||||||
* Usually a wrapper for STDC atexit.
|
* Usually a wrapper for STDC atexit.
|
||||||
*
|
*
|
||||||
* void *g_memmove(void *dest, const void *src, guint count);
|
* void g_memmove(gpointer dest, gconstpointer void *src, gulong count);
|
||||||
* A wrapper for STDC memmove, or an implementation, if memmove doesn't
|
* A wrapper for STDC memmove, or an implementation, if memmove doesn't
|
||||||
* exist. The prototype looks like the above, give or take a const,
|
* exist. The prototype looks like the above, give or take a const,
|
||||||
* or size_t.
|
* or size_t.
|
||||||
|
@ -81,6 +81,32 @@ const guint glib_micro_version = GLIB_MICRO_VERSION;
|
|||||||
const guint glib_interface_age = GLIB_INTERFACE_AGE;
|
const guint glib_interface_age = GLIB_INTERFACE_AGE;
|
||||||
const guint glib_binary_age = GLIB_BINARY_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
|
void
|
||||||
g_atexit (GVoidFunc func)
|
g_atexit (GVoidFunc func)
|
||||||
{
|
{
|
||||||
|
26
gutils.c
26
gutils.c
@ -81,6 +81,32 @@ const guint glib_micro_version = GLIB_MICRO_VERSION;
|
|||||||
const guint glib_interface_age = GLIB_INTERFACE_AGE;
|
const guint glib_interface_age = GLIB_INTERFACE_AGE;
|
||||||
const guint glib_binary_age = GLIB_BINARY_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
|
void
|
||||||
g_atexit (GVoidFunc func)
|
g_atexit (GVoidFunc func)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user