emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r110606: Fix last changes in make-doc


From: Eli Zaretskii
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r110606: Fix last changes in make-docfile.c.
Date: Sat, 20 Oct 2012 17:26:10 +0200
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 110606
committer: Eli Zaretskii <address@hidden>
branch nick: trunk
timestamp: Sat 2012-10-20 17:26:10 +0200
message:
  Fix last changes in make-docfile.c.
  
   lib-src/make-docfile.c (IS_SLASH, DEF_ELISP_FILE): New macros.
   (scan_lisp_file): Only pass a .el file if its basename matches a
   known file in its entirety.  Use IS_SLASH and DEF_ELISP_FILE.
modified:
  lib-src/ChangeLog
  lib-src/make-docfile.c
=== modified file 'lib-src/ChangeLog'
--- a/lib-src/ChangeLog 2012-10-20 14:56:09 +0000
+++ b/lib-src/ChangeLog 2012-10-20 15:26:10 +0000
@@ -1,3 +1,9 @@
+2012-10-20  Eli Zaretskii  <address@hidden>
+
+       * make-docfile.c (IS_SLASH, DEF_ELISP_FILE): New macros.
+       (scan_lisp_file): Only pass a .el file if its basename matches a
+       known file in its entirety.  Use IS_SLASH and DEF_ELISP_FILE.
+
 2012-10-20  Andreas Schwab  <address@hidden>
 
        * make-docfile.c (scan_lisp_file): Add bounds checking.

=== modified file 'lib-src/make-docfile.c'
--- a/lib-src/make-docfile.c    2012-10-20 13:28:42 +0000
+++ b/lib-src/make-docfile.c    2012-10-20 15:26:10 +0000
@@ -58,9 +58,11 @@
 #undef chdir
 #define READ_TEXT "rt"
 #define READ_BINARY "rb"
+#define IS_SLASH(c)  ((c) == '/' || (c) == '\\' || (c) == ':')
 #else  /* not DOS_NT */
 #define READ_TEXT "r"
 #define READ_BINARY "r"
+#define IS_SLASH(c)  ((c) == '/')
 #endif /* not DOS_NT */
 
 static int scan_file (char *filename);
@@ -1098,6 +1100,8 @@
   return 1;
 }
 
+#define DEF_ELISP_FILE(fn)  { #fn, sizeof(#fn) - 1 }
+
 static int
 scan_lisp_file (const char *filename, const char *mode)
 {
@@ -1108,12 +1112,14 @@
      follow the conventions of the doc strings expected by this
      function.  These conventions are automatically followed by the
      byte compiler when it produces the .elc files.  */
-  static const char *const uncompiled[] =
-    {
-      "loaddefs.el",
-      "loadup.el",
-      "charprop.el"
-    };
+  static struct {
+    const char *fn;
+    size_t fl;
+  } const uncompiled[] = {
+    DEF_ELISP_FILE (loaddefs.el),
+    DEF_ELISP_FILE (loadup.el),
+    DEF_ELISP_FILE (charprop.el)
+  };
   int i, match;
   size_t flen = strlen (filename);
 
@@ -1124,9 +1130,10 @@
       for (i = 0, match = 0; i < sizeof (uncompiled) / sizeof (uncompiled[0]);
           i++)
        {
-         if (strlen (uncompiled[i]) <= flen
-             && !strcmp (filename + flen - strlen (uncompiled[i]),
-                         uncompiled[i]))
+         if (uncompiled[i].fl <= flen
+             && !strcmp (filename + flen - uncompiled[i].fl, uncompiled[i].fn)
+             && (flen == uncompiled[i].fl
+                 || IS_SLASH (filename[flen - uncompiled[i].fl - 1])))
            {
              match = 1;
              break;


reply via email to

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