emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: memcmp, memcpy, memmove, memset


From: Paul Eggert
Subject: Re: memcmp, memcpy, memmove, memset
Date: Wed, 06 Jul 2011 18:41:47 -0700
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110516 Thunderbird/3.1.10

While I'm on the subject of cleaning out old
pre-C89 cruft that complicates maintenance a bit,
I thought I'd also remove the old replacements for
string.h, stdlib.h, stddef.h, limits.h, and float.h,
as all plausible Emacs porting targets have supported
these for many years.  So I'd like to install the following
patch after a bit more testing.

This removes several lines from the Windows port,
but in a way that I expect will be safe.

=== modified file 'ChangeLog'
--- ChangeLog   2011-07-06 23:34:39 +0000
+++ ChangeLog   2011-07-07 01:32:56 +0000
@@ -1,3 +1,12 @@
+2011-07-07  Paul Eggert  <address@hidden>
+
+       Assume freestanding C89 headers, string.h, stdlib.h.
+       Again, this simplifies the code, and all current platforms have these.
+       * configure.in (AC_CHECK_HEADERS): Don't check for limits.h.
+       (AC_HEADER_STDC): Remove.
+       (AC_CHECK_FUNCS): No need to check for strchr, strrchr.
+       (strchr, strrchr): Remove fallback macros.
+
 2011-07-06  Paul Eggert  <address@hidden>
 
        Assume support for memcmp, memcpy, memmove, memset.

=== modified file 'configure.in'
--- configure.in        2011-07-06 23:34:39 +0000
+++ configure.in        2011-07-07 01:32:56 +0000
@@ -1211,7 +1211,7 @@
 
 dnl checks for header files
 AC_CHECK_HEADERS(sys/select.h sys/time.h unistd.h utime.h \
-  linux/version.h sys/systeminfo.h limits.h \
+  linux/version.h sys/systeminfo.h \
   stdio_ext.h fcntl.h coff.h pty.h sys/mman.h \
   sys/vlimit.h sys/resource.h locale.h sys/_mbstate_t.h \
   sys/utsname.h pwd.h utmp.h dirent.h util.h)
@@ -1230,7 +1230,6 @@
 dnl On Solaris 8 there's a compilation warning for term.h because
 dnl it doesn't define `bool'.
 AC_CHECK_HEADERS(term.h, , , -)
-AC_HEADER_STDC
 AC_HEADER_TIME
 AC_CHECK_DECLS([sys_siglist])
 if test $ac_cv_have_decl_sys_siglist != yes; then
@@ -2702,7 +2701,7 @@
 random lrand48 logb frexp fmod rint cbrt ftime setsid \
 strerror fpathconf select euidaccess getpagesize tzset setlocale \
 utimes getrlimit setrlimit setpgid getcwd getwd shutdown getaddrinfo \
-__fpending mblen mbrlen mbsinit strsignal setitimer ualarm strchr strrchr \
+__fpending mblen mbrlen mbsinit strsignal setitimer ualarm \
 sendto recvfrom getsockopt setsockopt getsockname getpeername \
 gai_strerror mkstemp getline getdelim mremap fsync sync \
 difftime mempcpy mblen mbrlen posix_memalign \
@@ -3582,14 +3581,6 @@
 #include <string.h>
 #include <stdlib.h>
 
-#ifndef HAVE_STRCHR
-#define strchr(a, b) index (a, b)
-#endif
-
-#ifndef HAVE_STRRCHR
-#define strrchr(a, b) rindex (a, b)
-#endif
-
 #if defined __GNUC__ && (__GNUC__ > 2 \
                          || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
 #define NO_RETURN      __attribute__ ((__noreturn__))

=== modified file 'lib-src/ChangeLog'
--- lib-src/ChangeLog   2011-07-06 23:34:39 +0000
+++ lib-src/ChangeLog   2011-07-07 01:32:56 +0000
@@ -1,5 +1,13 @@
 2011-07-06  Paul Eggert  <address@hidden>
 
+       Assume freestanding C89 headers, string.h, stdlib.h.
+       * ebrowse.c: Include stdlib.h unconditionally.
+       * etags.c, update-game-score.c:
+       Include string.h and stdlib.h unconditionally.
+       * makefile.w32-in (LOCAL_CFLAGS): Don't define STDC_HEADERS.
+       * movemail.c, pop.c: Include string.h unconditionally.
+       * update-game-score.c: No need to include stdarg.h; not used.
+
        Assume support for memcmp, memcpy, memmove, memset.
        * etags.c (absolute_filename): Assume memmove exists.
 

=== modified file 'lib-src/ebrowse.c'
--- lib-src/ebrowse.c   2011-03-21 18:03:15 +0000
+++ lib-src/ebrowse.c   2011-07-07 01:32:56 +0000
@@ -20,11 +20,7 @@
 
 #include <config.h>
 #include <stdio.h>
-
-#ifdef HAVE_STDLIB_H
 #include <stdlib.h>
-#endif
-
 #include <string.h>
 #include <ctype.h>
 #include <assert.h>

=== modified file 'lib-src/etags.c'
--- lib-src/etags.c     2011-07-05 05:27:49 +0000
+++ lib-src/etags.c     2011-07-07 01:32:56 +0000
@@ -138,9 +138,7 @@
 #endif /* MSDOS */
 
 #ifdef WINDOWSNT
-# include <stdlib.h>
 # include <fcntl.h>
-# include <string.h>
 # include <direct.h>
 # include <io.h>
 # define MAXPATHLEN _MAX_PATH
@@ -151,27 +149,6 @@
 #   define HAVE_GETCWD
 # endif /* undef HAVE_GETCWD */
 #else /* not WINDOWSNT */
-# ifdef STDC_HEADERS
-#  include <stdlib.h>
-#  include <string.h>
-# else /* no standard C headers */
-   extern char *getenv (const char *);
-   extern char *strcpy (char *, const char *);
-   extern char *strncpy (char *, const char *, unsigned long);
-   extern char *strcat (char *, const char *);
-   extern char *strncat (char *, const char *, unsigned long);
-   extern int strcmp (const char *, const char *);
-   extern int strncmp (const char *, const char *, unsigned long);
-   extern int system (const char *);
-   extern unsigned long strlen (const char *);
-   extern void *malloc (unsigned long);
-   extern void *realloc (void *, unsigned long);
-   extern void exit (int);
-   extern void free (void *);
-   extern void *memmove (void *, const void *, unsigned long);
-#  define EXIT_SUCCESS 0
-#  define EXIT_FAILURE 1
-# endif
 #endif /* !WINDOWSNT */
 
 #include <unistd.h>
@@ -181,6 +158,8 @@
 # endif
 #endif /* HAVE_UNISTD_H */
 
+#include <stdlib.h>
+#include <string.h>
 #include <stdio.h>
 #include <ctype.h>
 #include <errno.h>

=== modified file 'lib-src/makefile.w32-in'
--- lib-src/makefile.w32-in     2011-05-19 06:04:16 +0000
+++ lib-src/makefile.w32-in     2011-07-07 01:32:56 +0000
@@ -21,7 +21,7 @@
 
 .PHONY: $(ALL)
 
-LOCAL_FLAGS    = -DWINDOWSNT -DDOS_NT -DSTDC_HEADERS=1 -DNO_LDAV=1 \
+LOCAL_FLAGS    = -DWINDOWSNT -DDOS_NT -DNO_LDAV=1 \
                  -DNO_ARCHIVES=1 -DHAVE_CONFIG_H=1 -I../lib \
                  -I../nt/inc -I../src
 

=== modified file 'lib-src/movemail.c'
--- lib-src/movemail.c  2011-06-10 17:50:07 +0000
+++ lib-src/movemail.c  2011-07-07 01:32:56 +0000
@@ -68,9 +68,7 @@
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
 #endif
-#ifdef HAVE_STRING_H
 #include <string.h>
-#endif
 #include "syswait.h"
 #ifdef MAIL_USE_POP
 #include "pop.h"

=== modified file 'lib-src/pop.c'
--- lib-src/pop.c       2011-04-16 22:32:35 +0000
+++ lib-src/pop.c       2011-07-07 01:32:56 +0000
@@ -65,9 +65,7 @@
 #include <netdb.h>
 #include <errno.h>
 #include <stdio.h>
-#ifdef STDC_HEADERS
 #include <string.h>
-#endif
 #include <unistd.h>
 
 #ifdef KERBEROS

=== modified file 'lib-src/update-game-score.c'
--- lib-src/update-game-score.c 2011-03-21 07:46:53 +0000
+++ lib-src/update-game-score.c 2011-07-07 01:32:56 +0000
@@ -35,12 +35,8 @@
 
 #include <unistd.h>
 #include <errno.h>
-#ifdef HAVE_STRING_H
 #include <string.h>
-#endif
-#ifdef HAVE_STDLIB_H
 #include <stdlib.h>
-#endif
 #include <stdio.h>
 #include <time.h>
 #include <pwd.h>
@@ -48,9 +44,6 @@
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
 #endif
-#ifdef STDC_HEADERS
-#include <stdarg.h>
-#endif
 #include <sys/stat.h>
 
 /* Needed for SunOS4, for instance.  */

=== modified file 'nt/ChangeLog'
--- nt/ChangeLog        2011-06-07 12:35:48 +0000
+++ nt/ChangeLog        2011-07-07 01:32:56 +0000
@@ -1,3 +1,10 @@
+2011-07-07  Paul Eggert  <address@hidden>
+
+       Assume freestanding C89 headers, string.h, stdlib.h.
+       * config.nt (HAVE_LIMITS_H, HAVE_STRING_H, HAVE_STDLIB_H)
+       (STDC_HEADERS): Remove.
+       Iinclude string.h, stdlib.h unconditionally.
+
 2011-06-07  Eli Zaretskii  <address@hidden>
 
        * inc/stdint.h (INT32_MAX, INT64_MAX, INTPTR_MAX, PTRDIFF_MAX)

=== modified file 'nt/config.nt'
--- nt/config.nt        2011-05-28 22:39:39 +0000
+++ nt/config.nt        2011-07-07 01:32:56 +0000
@@ -131,12 +131,8 @@
 #undef HAVE_LINUX_VERSION_H
 #undef HAVE_SYS_SYSTEMINFO_H
 #undef HAVE_TERMIOS_H
-#undef HAVE_LIMITS_H
-#undef HAVE_STRING_H
 #undef HAVE_STRINGS_H
-#undef HAVE_STDLIB_H
 #undef HAVE_PWD_H
-#undef STDC_HEADERS
 
 #undef HAVE_LIBDNET
 #undef HAVE_LIBPTHREADS
@@ -506,15 +502,11 @@
 #define PROTOTYPES 1
 #endif
 
-#ifdef HAVE_STRING_H
 #include "string.h"
-#endif
 #ifdef HAVE_STRINGS_H
 #include "strings.h"
 #endif
-#ifdef HAVE_STDLIB_H
 #include <stdlib.h>
-#endif
 
 #ifndef NO_RETURN
 #if defined __GNUC__ && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR >= 5))

=== modified file 'src/ChangeLog'
--- src/ChangeLog       2011-07-06 23:34:39 +0000
+++ src/ChangeLog       2011-07-07 01:32:56 +0000
@@ -1,3 +1,17 @@
+2011-07-07  Paul Eggert  <address@hidden>
+
+       Assume freestanding C89 headers, string.h, stdlib.h.
+       * data.c, doprnt.c, floatfns.c, print.c:
+       Include float.h unconditionally.
+       * gmalloc.c: Assume C89-at-least behavior for preprocessor,
+       limits.h, stddef.h, string.h.  Use memset instead of 'flood'.
+       * regex.c: Likewise for stddef.h, string.h.
+       (ISASCII): Remove; can assume it returns 1 now.  All uses removed.
+       * s/aix4-2.h (HAVE_STRING_H): Remove obsolete undef.
+       * s/ms-w32.h (HAVE_LIMITS_H, HAVE_STRING_H, HAVE_STDLIB_H)
+       (STDC_HEADERS): Remove obsolete defines.
+       * sysdep.c: Include limits.h unconditionally.
+
 2011-07-06  Paul Eggert  <address@hidden>
 
        Assume support for memcmp, memcpy, memmove, memset.

=== modified file 'src/data.c'
--- src/data.c  2011-06-19 18:44:58 +0000
+++ src/data.c  2011-07-07 01:32:56 +0000
@@ -35,10 +35,7 @@
 #include "termhooks.h"  /* For FRAME_KBOARD reference in y-or-n-p.  */
 #include "font.h"
 
-#ifdef STDC_HEADERS
 #include <float.h>
-#endif
-
 /* If IEEE_FLOATING_POINT isn't defined, default it from FLT_*.  */
 #ifndef IEEE_FLOATING_POINT
 #if (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \

=== modified file 'src/doprnt.c'
--- src/doprnt.c        2011-06-14 20:09:52 +0000
+++ src/doprnt.c        2011-07-07 01:32:56 +0000
@@ -102,13 +102,8 @@
 #include <stdio.h>
 #include <ctype.h>
 #include <setjmp.h>
-
-#ifdef STDC_HEADERS
 #include <float.h>
-#endif
-
 #include <unistd.h>
-
 #include <limits.h>
 
 #include "lisp.h"

=== modified file 'src/floatfns.c'
--- src/floatfns.c      2011-06-13 02:27:16 +0000
+++ src/floatfns.c      2011-07-07 01:32:56 +0000
@@ -53,10 +53,7 @@
 #include "lisp.h"
 #include "syssignal.h"
 
-#if STDC_HEADERS
 #include <float.h>
-#endif
-
 /* If IEEE_FLOATING_POINT isn't defined, default it from FLT_*. */
 #ifndef IEEE_FLOATING_POINT
 #if (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \

=== modified file 'src/gmalloc.c'
--- src/gmalloc.c       2011-07-05 05:27:49 +0000
+++ src/gmalloc.c       2011-07-07 01:32:56 +0000
@@ -41,28 +41,13 @@
 #define USE_PTHREAD
 #endif
 
-#if ((defined __cplusplus || (defined (__STDC__) && __STDC__) \
-      || defined STDC_HEADERS || defined PROTOTYPES))
 #undef PP
 #define        PP(args)        args
 #undef __ptr_t
 #define        __ptr_t         void *
-#else /* Not C++ or ANSI C.  */
-#undef PP
-#define        PP(args)        ()
-#undef __ptr_t
-#define        __ptr_t         char *
-#endif /* C++ or ANSI C.  */
 
 #include <string.h>
-
-#ifdef HAVE_LIMITS_H
 #include <limits.h>
-#endif
-#ifndef CHAR_BIT
-#define        CHAR_BIT        8
-#endif
-
 #include <unistd.h>
 
 #ifdef USE_PTHREAD
@@ -77,26 +62,9 @@
 {
 #endif
 
-#ifdef STDC_HEADERS
 #include <stddef.h>
 #define        __malloc_size_t         size_t
 #define        __malloc_ptrdiff_t      ptrdiff_t
-#else
-#ifdef __GNUC__
-#include <stddef.h>
-#ifdef __SIZE_TYPE__
-#define        __malloc_size_t         __SIZE_TYPE__
-#endif
-#endif
-#ifndef __malloc_size_t
-#define        __malloc_size_t         unsigned int
-#endif
-#define        __malloc_ptrdiff_t      int
-#endif
-
-#ifndef        NULL
-#define        NULL    0
-#endif
 
 
 /* Allocate SIZE bytes of memory.  */
@@ -1881,22 +1849,6 @@
     unsigned long int magic;   /* Magic number to check header integrity.  */
   };
 
-#if    defined(_LIBC) || defined(STDC_HEADERS) || defined(USG)
-#define flood memset
-#else
-static void flood (__ptr_t, int, __malloc_size_t);
-static void
-flood (ptr, val, size)
-     __ptr_t ptr;
-     int val;
-     __malloc_size_t size;
-{
-  char *cp = ptr;
-  while (size--)
-    *cp++ = val;
-}
-#endif
-
 static enum mcheck_status checkhdr (const struct hdr *);
 static enum mcheck_status
 checkhdr (hdr)
@@ -1935,7 +1887,7 @@
       hdr = ((struct hdr *) ptr) - 1;
       checkhdr (hdr);
       hdr->magic = MAGICFREE;
-      flood (ptr, FREEFLOOD, hdr->size);
+      memset (ptr, FREEFLOOD, hdr->size);
     }
   else
     hdr = NULL;
@@ -1961,7 +1913,7 @@
   hdr->size = size;
   hdr->magic = MAGICWORD;
   ((char *) &hdr[1])[size] = MAGICBYTE;
-  flood ((__ptr_t) (hdr + 1), MALLOCFLOOD, size);
+  memset ((__ptr_t) (hdr + 1), MALLOCFLOOD, size);
   return (__ptr_t) (hdr + 1);
 }
 
@@ -1981,7 +1933,7 @@
 
       checkhdr (hdr);
       if (size < osize)
-       flood ((char *) ptr + size, FREEFLOOD, osize - size);
+       memset ((char *) ptr + size, FREEFLOOD, osize - size);
     }
 
   __free_hook = old_free_hook;
@@ -1998,7 +1950,7 @@
   hdr->magic = MAGICWORD;
   ((char *) &hdr[1])[size] = MAGICBYTE;
   if (size > osize)
-    flood ((char *) (hdr + 1) + osize, MALLOCFLOOD, size - osize);
+    memset ((char *) (hdr + 1) + osize, MALLOCFLOOD, size - osize);
   return (__ptr_t) (hdr + 1);
 }
 

=== modified file 'src/print.c'
--- src/print.c 2011-06-24 21:25:22 +0000
+++ src/print.c 2011-07-07 01:32:56 +0000
@@ -46,10 +46,7 @@
 static Lisp_Object Qfloat_output_format;
 
 #include <math.h>
-
-#if STDC_HEADERS
 #include <float.h>
-#endif
 #include <ftoastr.h>
 
 /* Default to values appropriate for IEEE floating point.  */

=== modified file 'src/regex.c'
--- src/regex.c 2011-07-05 05:27:49 +0000
+++ src/regex.c 2011-07-07 01:32:56 +0000
@@ -37,9 +37,9 @@
 # include <config.h>
 #endif
 
-#if defined STDC_HEADERS && !defined emacs
-# include <stddef.h>
-#else
+#include <stddef.h>
+
+#ifdef emacs
 /* We need this for `regex.h', and perhaps for the Emacs include files.  */
 # include <sys/types.h>
 #endif
@@ -346,25 +346,6 @@
 
 #else /* not emacs */
 
-/* Jim Meyering writes:
-
-   "... Some ctype macros are valid only for character codes that
-   isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
-   using /bin/cc or gcc but without giving an ansi option).  So, all
-   ctype uses should be through macros like ISPRINT...  If
-   STDC_HEADERS is defined, then autoconf has verified that the ctype
-   macros don't need to be guarded with references to isascii. ...
-   Defining isascii to 1 should let any compiler worth its salt
-   eliminate the && through constant folding."
-   Solaris defines some of these symbols so we must undefine them first.  */
-
-# undef ISASCII
-# if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
-#  define ISASCII(c) 1
-# else
-#  define ISASCII(c) isascii(c)
-# endif
-
 /* 1 if C is an ASCII character.  */
 # define IS_REAL_ASCII(c) ((c) < 0200)
 
@@ -372,27 +353,28 @@
 # define ISUNIBYTE(c) 1
 
 # ifdef isblank
-#  define ISBLANK(c) (ISASCII (c) && isblank (c))
+#  define ISBLANK(c) isblank (c)
 # else
 #  define ISBLANK(c) ((c) == ' ' || (c) == '\t')
 # endif
 # ifdef isgraph
-#  define ISGRAPH(c) (ISASCII (c) && isgraph (c))
+#  define ISGRAPH(c) isgraph (c)
 # else
-#  define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
+#  define ISGRAPH(c) (isprint (c) && !isspace (c))
 # endif
 
+/* Solaris defines ISPRINT so we must undefine it first.  */
 # undef ISPRINT
-# define ISPRINT(c) (ISASCII (c) && isprint (c))
-# define ISDIGIT(c) (ISASCII (c) && isdigit (c))
-# define ISALNUM(c) (ISASCII (c) && isalnum (c))
-# define ISALPHA(c) (ISASCII (c) && isalpha (c))
-# define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
-# define ISLOWER(c) (ISASCII (c) && islower (c))
-# define ISPUNCT(c) (ISASCII (c) && ispunct (c))
-# define ISSPACE(c) (ISASCII (c) && isspace (c))
-# define ISUPPER(c) (ISASCII (c) && isupper (c))
-# define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
+# define ISPRINT(c) isprint (c)
+# define ISDIGIT(c) isdigit (c)
+# define ISALNUM(c) isalnum (c)
+# define ISALPHA(c) isalpha (c)
+# define ISCNTRL(c) iscntrl (c)
+# define ISLOWER(c) islower (c)
+# define ISPUNCT(c) ispunct (c)
+# define ISSPACE(c) isspace (c)
+# define ISUPPER(c) isupper (c)
+# define ISXDIGIT(c) isxdigit (c)
 
 # define ISWORD(c) ISALPHA(c)
 
@@ -439,10 +421,6 @@
 
 #endif /* not emacs */
 
-#ifndef NULL
-# define NULL (void *)0
-#endif
-
 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
    since ours (we hope) works properly with all combinations of
    machines, compilers, `char' and `unsigned char' argument types.

=== modified file 'src/s/aix4-2.h'
--- src/s/aix4-2.h      2011-03-17 05:15:08 +0000
+++ src/s/aix4-2.h      2011-07-07 01:32:56 +0000
@@ -47,11 +47,6 @@
 /* AIX doesn't define this.  */
 #define unix 1
 
-/* string.h defines rindex as a macro, at least with native cc, so we
-   lose declaring char * rindex without this.
-   It is just a guess which versions of AIX need this definition.  */
-#undef HAVE_STRING_H
-
 /* Perry Smith <address@hidden> says these are correct.  */
 #define SIGNALS_VIA_CHARACTERS
 #define CLASH_DETECTION

=== modified file 'src/s/ms-w32.h'
--- src/s/ms-w32.h      2011-04-23 03:07:16 +0000
+++ src/s/ms-w32.h      2011-07-07 01:32:56 +0000
@@ -111,11 +111,7 @@
 #undef  HAVE_UTIME_H
 #undef  HAVE_LINUX_VERSION_H
 #undef  HAVE_SYS_SYSTEMINFO_H
-#define HAVE_LIMITS_H 1
-#define HAVE_STRING_H 1
-#define HAVE_STDLIB_H 1
 #define HAVE_PWD_H 1
-#define STDC_HEADERS 1
 #define TIME_WITH_SYS_TIME 1
 
 #define HAVE_GETTIMEOFDAY 1
@@ -386,4 +382,3 @@
 
 
 /* ============================================================ */
-

=== modified file 'src/sysdep.c'
--- src/sysdep.c        2011-07-05 05:27:49 +0000
+++ src/sysdep.c        2011-07-07 01:32:56 +0000
@@ -26,9 +26,7 @@
 #include <pwd.h>
 #include <grp.h>
 #endif /* HAVE_PWD_H */
-#ifdef HAVE_LIMITS_H
 #include <limits.h>
-#endif /* HAVE_LIMITS_H */
 #include <unistd.h>
 
 #include <allocator.h>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]