diff options
author | Eli Zaretskii <eliz@gnu.org> | 2012-10-20 17:26:10 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2012-10-20 17:26:10 +0200 |
commit | 83c85d8e2e6c1e1cb309f554555e1aebc1dcb44f (patch) | |
tree | da7656122cac50b11b8efc31f8c3817306946b3a /lib-src/make-docfile.c | |
parent | 71aa63da789e39ef49a2716fb977d2ea0e2d5f07 (diff) |
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.
Diffstat (limited to 'lib-src/make-docfile.c')
-rw-r--r-- | lib-src/make-docfile.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c index 2f04f1c96f..b6cd1530a4 100644 --- a/lib-src/make-docfile.c +++ b/lib-src/make-docfile.c @@ -58,9 +58,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #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 @@ search_lisp_doc_at_eol (FILE *infile) 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 @@ scan_lisp_file (const char *filename, const char *mode) 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 @@ scan_lisp_file (const char *filename, const char *mode) 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; |