Commit 6e4a7fca authored by Dan Winship's avatar Dan Winship

Require C90 compliance

Assume all supported platforms implement C90, and therefore they
(correctly) implement atexit(), memmove(), setlocale(), strerror(),
and vprintf(), and have <float.h> and <limits.h>.

(Also remove the configure check testing that "do ... while (0)" works
correctly; the non-do/while-based version of G_STMT_START and
G_STMT_END was removed years ago, but the check remained. Also, remove
some checks that configure.ac claimed were needed for libcharset, but
aren't actually used.)

Note that removing the g_memmove() function is not an ABI break even
on systems where g_memmove() was previously not a macro, because it
was never marked GLIB_AVAILABLE_IN_ALL or listed in glib.symbols, so
it would have been glib-internal since 2004.

https://bugzilla.gnome.org/show_bug.cgi?id=710519
parent 7f5b2901
......@@ -180,9 +180,6 @@
/* Define to 1 if you have the `fdwalk' function. */
/* #undef HAVE_FDWALK */
/* Define to 1 if you have the <float.h> header file. */
#define HAVE_FLOAT_H 1
/* Define to 1 if you have the <fstab.h> header file. */
/* #undef HAVE_FSTAB_H */
......@@ -314,9 +311,6 @@
/* Define if libelf is available */
/* #undef HAVE_LIBELF */
/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* Define to 1 if you have the `link' function. */
/* #undef HAVE_LINK */
......@@ -354,9 +348,6 @@
/* Define to 1 if you have the `memmem' function. */
/* #undef HAVE_MEMMEM */
/* Define to 1 if you have the `memmove' function. */
#define HAVE_MEMMOVE 1
/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
......@@ -381,9 +372,6 @@
/* Have non-POSIX function getpwuid_r */
/* #undef HAVE_NONPOSIX_GETPWUID_R */
/* Define to 1 if you have the `on_exit' function. */
/* #undef HAVE_ON_EXIT */
/* Define to 1 if you have the `pipe2' function. */
/* #undef HAVE_PIPE2 */
......@@ -438,9 +426,6 @@
/* Define to 1 if you have the `setenv' function. */
/* #undef HAVE_SETENV */
/* Define to 1 if you have the `setlocale' function. */
#define HAVE_SETLOCALE 1
/* Define to 1 if you have the `setmntent' function. */
/* #undef HAVE_SETMNTENT */
......@@ -466,9 +451,6 @@
/* Define to 1 if you have the `statvfs' function. */
/* #undef HAVE_STATVFS */
/* Define to 1 if you have the <stddef.h> header file. */
#define HAVE_STDDEF_H 1
/* Define to 1 if you have the <stdint.h> header file. */
#ifndef _MSC_VER
#define HAVE_STDINT_H 1
......@@ -492,9 +474,6 @@
#endif
#endif /* _MSC_VER */
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the `stpcpy' function. */
/* #undef HAVE_STPCPY */
......@@ -507,9 +486,6 @@
#define HAVE_STRCASECMP 1
#endif /* _MSC_VER or __gcc__ */
/* Define to 1 if you have the `strerror' function. */
#define HAVE_STRERROR 1
/* Define to 1 if you have the <strings.h> header file. */
#if !defined(_MSC_VER) && !defined(__DMC__)
#define HAVE_STRINGS_H 1
......@@ -517,9 +493,6 @@
/* #undef HAVE_STRINGS_H */
#endif /* _MSC_VER or __DMC__ */
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Have functions strlcpy and strlcat */
/* #undef HAVE_STRLCPY */
......@@ -723,9 +696,6 @@
/* Define to 1 if you have the `vasprintf' function. */
#define HAVE_VASPRINTF 1
/* Define to 1 if you have the `vprintf' function. */
#define HAVE_VPRINTF 1
/* Define to 1 if you have the `vsnprintf' function. */
#ifndef _MSC_VER
#define HAVE_VSNPRINTF 1
......@@ -748,9 +718,6 @@
/* Define if you have the 'wint_t' type. */
#define HAVE_WINT_T 1
/* Have a working bcopy */
/* #undef HAVE_WORKING_BCOPY */
/* Define to 1 if xattr is available */
/* #undef HAVE_XATTR */
......
......@@ -508,10 +508,9 @@ AS_IF([test "$glib_native_win32" = "yes"], [
AM_CONDITIONAL(OS_WIN32_AND_DLL_COMPILATION, [test x$glib_native_win32 = xyes -a x$glib_win32_static_compilation != xyes])
# Checks for library functions.
AC_FUNC_VPRINTF
AC_FUNC_ALLOCA
AC_CHECK_FUNCS(mmap posix_memalign memalign valloc fsync pipe2 issetugid)
AC_CHECK_FUNCS(atexit on_exit timegm gmtime_r)
AC_CHECK_FUNCS(timegm gmtime_r)
AC_CACHE_CHECK([for __libc_enable_secure], glib_cv_have_libc_enable_secure,
[AC_TRY_LINK([#include <unistd.h>
......@@ -679,21 +678,6 @@ main (void) {
}]])],[g_can_inline=yes],[g_can_inline=no])
AC_MSG_RESULT($g_can_inline)
dnl *** check for working do while(0) macros ***
AC_CACHE_CHECK([for working do while(0) macros], g_cv_support_dowhile_macros, [
AC_TRY_COMPILE([],[
#define STMT_START do
#define STMT_END while(0)
#define STMT_TEST STMT_START { i = 0; } STMT_END
int main(void) { int i = 1; STMT_TEST; return i; }],
[g_cv_support_dowhile_macros=yes],
[g_cv_support_dowhile_macros=no],
[g_cv_support_dowhile_macros=yes])
])
if test x$g_cv_support_dowhile_macros = xyes; then
AC_DEFINE(HAVE_DOWHILE_MACROS, 1, [define for working do while(0) macros])
fi
# check for flavours of varargs macros
AC_MSG_CHECKING(for ISO C99 varargs macros in C)
AC_TRY_COMPILE([],[
......@@ -788,8 +772,8 @@ fi
# check for header files
AC_CHECK_HEADERS([dirent.h float.h limits.h pwd.h grp.h sys/param.h sys/poll.h sys/resource.h])
AC_CHECK_HEADERS([sys/time.h sys/times.h sys/wait.h unistd.h values.h])
AC_CHECK_HEADERS([dirent.h pwd.h grp.h sys/param.h sys/poll.h sys/resource.h])
AC_CHECK_HEADERS([sys/time.h sys/times.h sys/wait.h unistd.h])
AC_CHECK_HEADERS([sys/select.h sys/types.h stdint.h inttypes.h sched.h malloc.h])
AC_CHECK_HEADERS([sys/vfs.h sys/vmount.h sys/statfs.h sys/statvfs.h sys/filio.h])
AC_CHECK_HEADERS([mntent.h sys/mnttab.h sys/vfstab.h sys/mntctl.h fstab.h])
......@@ -797,6 +781,10 @@ AC_CHECK_HEADERS([sys/uio.h])
AC_CHECK_HEADERS([linux/magic.h])
AC_CHECK_HEADERS([sys/prctl.h])
# We don't care about this, but we need to keep including it in
# glibconfig.h for backward compatibility
AC_CHECK_HEADERS([values.h])
AC_CHECK_HEADERS([sys/mount.h sys/sysctl.h], [], [],
[#if HAVE_SYS_PARAM_H
#include <sys/param.h>
......@@ -830,8 +818,6 @@ AC_STRUCT_DIRENT_D_TYPE
# Checks for libcharset
AM_LANGINFO_CODESET
AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
AC_CHECK_FUNCS(setlocale)
gl_GLIBC21
# check additional type sizes
......@@ -978,7 +964,7 @@ int main ()
AC_MSG_RESULT($glib_ssize_type)
# Check for some functions
AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf stpcpy strcasecmp strncasecmp poll getcwd vasprintf setenv unsetenv getc_unlocked readlink symlink fdwalk memmem)
AC_CHECK_FUNCS(lstat strsignal vsnprintf stpcpy strcasecmp strncasecmp poll getcwd vasprintf setenv unsetenv getc_unlocked readlink symlink fdwalk memmem)
AC_CHECK_FUNCS(chown lchmod lchown fchmod fchown link utimes getgrgid getpwuid getresuid)
AC_CHECK_FUNCS(getmntent_r setmntent endmntent hasmntopt getfsstat getvfsstat fallocate)
# Check for high-resolution sleep functions
......@@ -1247,33 +1233,6 @@ jm_AC_TYPE_INTMAX_T
AC_CHECK_FUNCS([snprintf wcslen])
AC_FUNC_SNPRINTF_C99
# Check if bcopy can be used for overlapping copies, if memmove isn't found.
# The check is borrowed from the PERL Configure script.
AS_IF([test "$ac_cv_func_memmove" != "yes"], [
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)])
GLIB_ASSERT_SET(glib_cv_working_bcopy)
if test "$glib_cv_working_bcopy" = "yes"; then
AC_DEFINE(HAVE_WORKING_BCOPY,1,[Have a working bcopy])
fi
])
# Check if <sys/select.h> needs to be included for fd_set
AC_MSG_CHECKING([for fd_set])
AC_TRY_COMPILE([#include <sys/types.h>],
......@@ -2847,12 +2806,8 @@ AC_CONFIG_COMMANDS([glib/glibconfig.h],
_______EOF
if test x$glib_limits_h = xyes; then
echo '#include <limits.h>' >> $outfile
fi
if test x$glib_float_h = xyes; then
echo '#include <float.h>' >> $outfile
fi
echo '#include <limits.h>' >> $outfile
echo '#include <float.h>' >> $outfile
if test x$glib_values_h = xyes; then
echo '#include <values.h>' >> $outfile
fi
......@@ -2875,19 +2830,19 @@ _______EOF
G_BEGIN_DECLS
#define G_MINFLOAT $glib_mf
#define G_MAXFLOAT $glib_Mf
#define G_MINDOUBLE $glib_md
#define G_MAXDOUBLE $glib_Md
#define G_MINSHORT $glib_ms
#define G_MAXSHORT $glib_Ms
#define G_MAXUSHORT $glib_Mus
#define G_MININT $glib_mi
#define G_MAXINT $glib_Mi
#define G_MAXUINT $glib_Mui
#define G_MINLONG $glib_ml
#define G_MAXLONG $glib_Ml
#define G_MAXULONG $glib_Mul
#define G_MINFLOAT FLT_MIN
#define G_MAXFLOAT FLT_MAX
#define G_MINDOUBLE DBL_MIN
#define G_MAXDOUBLE DBL_MAX
#define G_MINSHORT SHRT_MIN
#define G_MAXSHORT SHRT_MAX
#define G_MAXUSHORT USHRT_MAX
#define G_MININT INT_MIN
#define G_MAXINT INT_MAX
#define G_MAXUINT UINT_MAX
#define G_MINLONG LONG_MIN
#define G_MAXLONG LONG_MAX
#define G_MAXULONG ULONG_MAX
_______EOF
......@@ -2998,8 +2953,10 @@ _______EOF
cat >>$outfile <<_______EOF
$glib_atexit
$glib_memmove
#ifndef G_DISABLE_DEPRECATED
#define g_ATEXIT(proc) (atexit (proc))
#define g_memmove(dest,src,len) G_STMT_START { memmove ((dest), (src), (len)); } G_STMT_END
#endif
$glib_defines
$glib_os
$glib_static_compilation
......@@ -3178,34 +3135,6 @@ else
glib_header_alloca_h="$ac_cv_header_alloca_h"
fi
case xyes in
x$ac_cv_header_float_h)
glib_float_h=yes
glib_mf=FLT_MIN glib_Mf=FLT_MAX
glib_md=DBL_MIN glib_Md=DBL_MAX
;;
x$ac_cv_header_values_h)
glib_values_h=yes
glib_mf=MINFLOAT glib_Mf=MAXFLOAT
glib_md=MINDOUBLE glib_Md=MAXDOUBLE
;;
esac
case xyes in
x$ac_cv_header_limits_h)
glib_limits_h=yes
glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX
glib_mi=INT_MIN glib_Mi=INT_MAX glib_Mui=UINT_MAX
glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX
;;
x$ac_cv_header_values_h)
glib_values_h=yes
glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)"
glib_mi=MININT glib_Mi=MAXINT glib_Mui="(((guint)G_MAXINT)*2+1)"
glib_ml=MINLONG glib_Ml=MAXLONG glib_Mul="(((gulong)G_MAXLONG)*2+1)"
;;
esac
if test x$ac_cv_header_sys_poll_h = xyes ; then
glib_sys_poll_h=yes
fi
......@@ -3387,35 +3316,6 @@ $ac_cv_sizeof___int64)
esac
case xyes in
x$ac_cv_func_atexit)
glib_atexit="
#define g_ATEXIT(proc) (atexit (proc))"
;;
x$ac_cv_func_on_exit)
glib_atexit="
#define g_ATEXIT(proc) (on_exit ((void (*)(int, void*))(proc), NULL))"
;;
esac
case xyes in
x$ac_cv_func_memmove)
glib_memmove='
#define g_memmove(dest,src,len) G_STMT_START { memmove ((dest), (src), (len)); } G_STMT_END'
;;
x$glib_cv_working_bcopy)
glib_memmove="
/* memmove isn't available, but bcopy can copy overlapping memory regions */
#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
glib_defines="
#define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
#define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
......
......@@ -639,7 +639,7 @@ compact_buffer (GBufferedInputStream *stream)
current_size = priv->end - priv->pos;
g_memmove (priv->buffer, priv->buffer + priv->pos, current_size);
memmove (priv->buffer, priv->buffer + priv->pos, current_size);
priv->pos = 0;
priv->end = current_size;
......
......@@ -431,7 +431,7 @@ flush_buffer (GBufferedOutputStream *stream,
count = priv->pos - bytes_written;
if (count > 0)
g_memmove (priv->buffer, priv->buffer + bytes_written, count);
memmove (priv->buffer, priv->buffer + bytes_written, count);
priv->pos -= bytes_written;
......
......@@ -476,8 +476,8 @@ g_array_prepend_vals (GArray *farray,
g_array_maybe_expand (array, len);
g_memmove (g_array_elt_pos (array, len), g_array_elt_pos (array, 0),
g_array_elt_len (array, array->len));
memmove (g_array_elt_pos (array, len), g_array_elt_pos (array, 0),
g_array_elt_len (array, array->len));
memcpy (g_array_elt_pos (array, 0), data, g_array_elt_len (array, len));
......@@ -525,9 +525,9 @@ g_array_insert_vals (GArray *farray,
g_array_maybe_expand (array, len);
g_memmove (g_array_elt_pos (array, len + index_),
g_array_elt_pos (array, index_),
g_array_elt_len (array, array->len - index_));
memmove (g_array_elt_pos (array, len + index_),
g_array_elt_pos (array, index_),
g_array_elt_len (array, array->len - index_));
memcpy (g_array_elt_pos (array, index_), data, g_array_elt_len (array, len));
......@@ -597,9 +597,9 @@ g_array_remove_index (GArray *farray,
array->clear_func (g_array_elt_pos (array, index_));
if (index_ != array->len - 1)
g_memmove (g_array_elt_pos (array, index_),
g_array_elt_pos (array, index_ + 1),
g_array_elt_len (array, array->len - index_ - 1));
memmove (g_array_elt_pos (array, index_),
g_array_elt_pos (array, index_ + 1),
g_array_elt_len (array, array->len - index_ - 1));
array->len -= 1;
......@@ -684,9 +684,9 @@ g_array_remove_range (GArray *farray,
}
if (index_ + length != array->len)
g_memmove (g_array_elt_pos (array, index_),
g_array_elt_pos (array, index_ + length),
(array->len - (index_ + length)) * array->elt_size);
memmove (g_array_elt_pos (array, index_),
g_array_elt_pos (array, index_ + length),
(array->len - (index_ + length)) * array->elt_size);
array->len -= length;
if (G_UNLIKELY (g_mem_gc_friendly))
......@@ -1185,8 +1185,8 @@ g_ptr_array_remove_index (GPtrArray *farray,
array->element_free_func (array->pdata[index_]);
if (index_ != array->len - 1)
g_memmove (array->pdata + index_, array->pdata + index_ + 1,
sizeof (gpointer) * (array->len - index_ - 1));
memmove (array->pdata + index_, array->pdata + index_ + 1,
sizeof (gpointer) * (array->len - index_ - 1));
array->len -= 1;
......@@ -1269,9 +1269,9 @@ g_ptr_array_remove_range (GPtrArray *farray,
if (index_ + length != array->len)
{
g_memmove (&array->pdata[index_],
&array->pdata[index_ + length],
(array->len - (index_ + length)) * sizeof (gpointer));
memmove (&array->pdata[index_],
&array->pdata[index_ + length],
(array->len - (index_ + length)) * sizeof (gpointer));
}
array->len -= length;
......
......@@ -215,7 +215,7 @@ g_bsearch_array_grow (GBSearchArray *barray,
else
barray = (GBSearchArray *) g_realloc (barray, sizeof (GBSearchArray) + new_size);
node = G_BSEARCH_ARRAY_NODES (barray) + index_ * bconfig->sizeof_node;
g_memmove (node + bconfig->sizeof_node, node, (barray->n_nodes - index_) * bconfig->sizeof_node);
memmove (node + bconfig->sizeof_node, node, (barray->n_nodes - index_) * bconfig->sizeof_node);
barray->n_nodes += 1;
return barray;
}
......@@ -271,7 +271,7 @@ g_bsearch_array_remove (GBSearchArray *barray,
barray->n_nodes -= 1;
node = G_BSEARCH_ARRAY_NODES (barray) + index_ * bconfig->sizeof_node;
g_memmove (node, node + bconfig->sizeof_node, (barray->n_nodes - index_) * bconfig->sizeof_node);
memmove (node, node + bconfig->sizeof_node, (barray->n_nodes - index_) * bconfig->sizeof_node);
if (G_UNLIKELY (bconfig->flags & G_BSEARCH_ARRAY_AUTO_SHRINK))
{
guint new_size = barray->n_nodes * bconfig->sizeof_node;
......
......@@ -2419,7 +2419,7 @@ g_path_get_dirname (const gchar *file_name)
len = (guint) 1 + base - file_name;
base = g_new (gchar, len + 1);
g_memmove (base, file_name, len);
memmove (base, file_name, len);
base[len] = 0;
return base;
......
......@@ -1265,10 +1265,7 @@ allocator_add_slab (Allocator *allocator,
guint i;
if (!mem)
{
const gchar *syserr = "unknown error";
#if HAVE_STRERROR
syserr = strerror (errno);
#endif
const gchar *syserr = strerror (errno);
mem_error ("failed to allocate %u bytes (alignment: %u): %s\n",
(guint) (page_size - NATIVE_MALLOC_PADDING), (guint) page_size, syserr);
}
......@@ -1534,10 +1531,7 @@ static SmcBranch **smc_tree_root = NULL;
static void
smc_tree_abort (int errval)
{
const char *syserr = "unknown error";
#if HAVE_STRERROR
syserr = strerror (errval);
#endif
const char *syserr = strerror (errval);
mem_error ("MemChecker: failure in debugging tree: %s", syserr);
}
......@@ -1553,7 +1547,7 @@ smc_tree_branch_grow_L (SmcBranch *branch,
if (!branch->entries)
smc_tree_abort (errno);
entry = branch->entries + index;
g_memmove (entry + 1, entry, (branch->n_entries - index) * sizeof (entry[0]));
memmove (entry + 1, entry, (branch->n_entries - index) * sizeof (entry[0]));
branch->n_entries += 1;
return entry;
}
......@@ -1652,7 +1646,7 @@ smc_tree_remove (SmcKType key)
{
unsigned int i = entry - smc_tree_root[ix0][ix1].entries;
smc_tree_root[ix0][ix1].n_entries -= 1;
g_memmove (entry, entry + 1, (smc_tree_root[ix0][ix1].n_entries - i) * sizeof (entry[0]));
memmove (entry, entry + 1, (smc_tree_root[ix0][ix1].n_entries - i) * sizeof (entry[0]));
if (!smc_tree_root[ix0][ix1].n_entries)
{
/* avoid useless pressure on the memory system */
......
......@@ -1250,25 +1250,14 @@ g_ascii_strtoll (const gchar *nptr,
const gchar *
g_strerror (gint errnum)
{
gchar buf[64];
gchar *msg;
gchar *tofree;
gchar *tofree = NULL;
const gchar *ret;
gint saved_errno = errno;
msg = tofree = NULL;
#ifdef HAVE_STRERROR
msg = strerror (errnum);
if (!g_get_charset (NULL))
msg = tofree = g_locale_to_utf8 (msg, -1, NULL, NULL, NULL);
#endif
if (!msg)
{
msg = buf;
_g_sprintf (msg, "unknown error (%d)", errnum);
}
ret = g_intern_string (msg);
g_free (tofree);
......@@ -2220,7 +2209,7 @@ g_strchug (gchar *string)
for (start = (guchar*) string; *start && g_ascii_isspace (*start); start++)
;
g_memmove (string, start, strlen ((gchar *) start) + 1);
memmove (string, start, strlen ((gchar *) start) + 1);
return string;
}
......
......@@ -460,7 +460,7 @@ g_string_insert_len (GString *string,
/* Open up space where we are going to insert. */
if (pos < string->len)
g_memmove (string->str + pos + len, string->str + pos, string->len - pos);
memmove (string->str + pos + len, string->str + pos, string->len - pos);
/* Move the source part before the gap, if any. */
if (offset < pos)
......@@ -483,7 +483,7 @@ g_string_insert_len (GString *string,
* of the old string to the end, opening up space
*/
if (pos < string->len)
g_memmove (string->str + pos + len, string->str + pos, string->len - pos);
memmove (string->str + pos + len, string->str + pos, string->len - pos);
/* insert the new string */
if (len == 1)
......@@ -805,7 +805,7 @@ g_string_insert_c (GString *string,
/* If not just an append, move the old stuff */
if (pos < string->len)
g_memmove (string->str + pos + 1, string->str + pos, string->len - pos);
memmove (string->str + pos + 1, string->str + pos, string->len - pos);
string->str[pos] = c;
......@@ -880,7 +880,7 @@ g_string_insert_unichar (GString *string,
/* If not just an append, move the old stuff */
if (pos < string->len)
g_memmove (string->str + pos + charlen, string->str + pos, string->len - pos);
memmove (string->str + pos + charlen, string->str + pos, string->len - pos);
dest = string->str + pos;
/* Code copied from g_unichar_to_utf() */
......@@ -997,7 +997,7 @@ g_string_erase (GString *string,
g_return_val_if_fail (pos + len <= string->len, string);
if (pos + len < string->len)
g_memmove (string->str + pos, string->str + pos + len, string->len - (pos + len));
memmove (string->str + pos, string->str + pos + len, string->len - (pos + len));
}
string->len -= len;
......
......@@ -172,7 +172,6 @@ _glib_get_dll_directory (void)
#endif
#if !defined (HAVE_MEMMOVE) && !defined (HAVE_WORKING_BCOPY)
/**
* g_memmove:
* @dest: the destination address to copy the bytes to.
......@@ -182,37 +181,8 @@ _glib_get_dll_directory (void)
* Copies a block of memory @len bytes long, from @src to @dest.
* The source and destination areas may overlap.
*
* In order to use this function, you must include
* <filename>string.h</filename> yourself, because this macro will
* typically simply resolve to memmove() and GLib does not include
* <filename>string.h</filename> for you.
* Deprecated:2.40: Just use memmove().
*/
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 */
#ifdef G_OS_WIN32
#undef g_atexit
......@@ -259,29 +229,13 @@ void
g_atexit (GVoidFunc func)
{
gint result;
const gchar *error = NULL;
/* keep this in sync with glib.h */
#ifdef G_NATIVE_ATEXIT
result = ATEXIT (func);
if (result)
error = g_strerror (errno);
#elif defined (HAVE_ATEXIT)
result = atexit ((void (*)(void)) func);
if (result)
error = g_strerror (errno);
#elif defined (HAVE_ON_EXIT)
result = on_exit ((void (*)(int, void *)) func, NULL);
if (result)
error = g_strerror (errno);
#else
result = 0;
error = "no implementation";
#endif /* G_NATIVE_ATEXIT */
if (error)
g_error ("Could not register atexit() function: %s", error);
{
g_error ("Could not register atexit() function: %s",
g_strerror (errno));
}
}
/* Based on execvp() from GNU Libc.
......
......@@ -43,7 +43,7 @@ G_BEGIN_DECLS
# if defined (__GNUC__) && defined (__PPC__) && (defined (_CALL_SYSV) || defined (_WIN32))
# define G_VA_COPY(ap1, ap2) (*(ap1) = *(ap2))
# elif defined (G_VA_COPY_AS_ARRAY)
# define G_VA_COPY(ap1, ap2) g_memmove ((ap1), (ap2), sizeof (va_list))
# define G_VA_COPY(ap1, ap2) memmove ((ap1), (ap2), sizeof (va_list))
# else /* va_list is a pointer */
# define G_VA_COPY(ap1, ap2) ((ap1) = (ap2))
# endif /* va_list is a pointer */
......@@ -239,16 +239,7 @@ gchar *g_format_size_for_display (goffset size);
* function passed to g_atexit().
*/
typedef void (*GVoidFunc) (void);
#ifndef ATEXIT
# define ATEXIT(proc) g_ATEXIT(proc)
#else
# define G_NATIVE_ATEXIT
#endif /* ATEXIT */
/* we use a GLib function as a replacement for ATEXIT, so
* the programmer is not required to check the return value
* (if there is any in the implementation) and doesn't encounter
* missing include files.
*/
#define ATEXIT(proc) g_ATEXIT(proc)
GLIB_DEPRECATED
void g_atexit (GVoidFunc func);
......
......@@ -5,6 +5,7 @@ noinst_LTLIBRARIES += libpcre.la
libpcre_la_CPPFLAGS = \
-DG_LOG_DOMAIN=\"GLib-GRegex\" \
-DHAVE_CONFIG_H \
-DHAVE_MEMMOVE \
-DSUPPORT_UCP \
-DSUPPORT_UTF \
-DSUPPORT_UTF8 \
......
......@@ -548,11 +548,9 @@ test_s (void)
g_assert_cmpint (res, ==, 5);
g_assert_cmpstr (buf, ==, " abc");
#if 0 /* HP-UX doesn't get this right */
res = g_snprintf (buf, 128, "%*s", -5, "abc");
g_assert_cmpint (res, ==, 5);
g_assert_cmpstr (buf, ==, "abc ");
#endif
res = g_snprintf (buf, 128, "%*.*s", 5, 2, "abc");
g_assert_cmpint (res, ==, 5);
......
......@@ -1525,8 +1525,8 @@ type_iface_add_prerequisite_W (TypeNode *iface,
IFACE_NODE_PREREQUISITES (iface),
IFACE_NODE_N_PREREQUISITES (iface));
prerequisites = IFACE_NODE_PREREQUISITES (iface);
g_memmove (prerequisites + i + 1, prerequisites + i,
sizeof (prerequisites[0]) * (IFACE_NODE_N_PREREQUISITES (iface) - i - 1));
memmove (prerequisites + i + 1, prerequisites + i,
sizeof (prerequisites[0]) * (IFACE_NODE_N_PREREQUISITES (iface) - i - 1));
prerequisites[i] = prerequisite_type;
/* we want to get notified when prerequisites get added to prerequisite_node */
......@@ -2495,9 +2495,9 @@ g_type_remove_class_cache_func (gpointer cache_data,
static_class_cache_funcs[i].cache_func == cache_func)
{
static_n_class_cache_funcs--;
g_memmove (static_class_cache_funcs + i,
static_class_cache_funcs + i + 1,
sizeof (static_class_cache_funcs[0]) * (static_n_class_cache_funcs - i));
memmove (static_class_cache_funcs + i,
static_class_cache_funcs + i + 1,
sizeof (static_class_cache_funcs[0]) * (static_n_class_cache_funcs - i));
static_class_cache_funcs = g_renew (ClassCacheFunc, static_class_cache_funcs, static_n_class_cache_funcs);
found_it = TRUE;
break;
......@@ -2569,9 +2569,9 @@ g_type_remove_interface_check (gpointer check_data,
static_iface_check_funcs[i].check_func == check_func)
{
static_n_iface_check_funcs--;
g_memmove (static_iface_check_funcs + i,
static_iface_check_funcs + i + 1,
sizeof (static_iface_check_funcs[0]) * (static_n_iface_check_funcs - i));
memmove (static_iface_check_funcs + i,
static_iface_check_funcs + i + 1,
sizeof (static_iface_check_funcs[0]) * (static_n_iface_check_funcs - i));
static_iface_check_funcs = g_renew (IFaceCheckFunc, static_iface_check_funcs, static_n_iface_check_funcs);
found_it = TRUE;
break;
......@@ -3724,7 +3724,7 @@ type_set_qdata_W (TypeNode *node,
for (i = 0; i < gdata->n_qdatas - 1; i++)
if (qdata[i].quark > quark)
break;
g_memmove (qdata + i + 1, qdata + i, sizeof (qdata[0]) * (gdata->n_qdatas - i - 1));
memmove (qdata + i + 1, qdata + i, sizeof (qdata[0]) * (gdata->n_qdatas - i - 1));