Mercurial > emacs
comparison lib-src/ebrowse.c @ 28773:9afdf8a67091
(PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
to semi-colon.
(FILENAME_EQ): New macro, for comparing file names.
(add_member_decl, add_global_decl, add_member_defn): Use
FILENAME_EQ.
(process_file): Don't assume that fread always reads as many bytes
as it was told to (DOS-style CR-LF text files fail this logic).
(open_file): Allocate enough space for path->path plus the file
name and the slash.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Tue, 02 May 2000 11:01:29 +0000 |
parents | 0813367c7810 |
children | 7bb3a2b7ff29 |
comparison
equal
deleted
inserted
replaced
28772:6d99cfcac023 | 28773:9afdf8a67091 |
---|---|
55 | 55 |
56 #define READ_CHUNK_SIZE (100 * 1024) | 56 #define READ_CHUNK_SIZE (100 * 1024) |
57 | 57 |
58 /* The character used as a separator in path lists (like $PATH). */ | 58 /* The character used as a separator in path lists (like $PATH). */ |
59 | 59 |
60 #if defined(__MSDOS__) || defined(WINDOWSNT) | |
61 #define PATH_LIST_SEPARATOR ';' | |
62 #define FILENAME_EQ(X,Y) (strcasecmp(X,Y) == 0) | |
63 #else | |
60 #define PATH_LIST_SEPARATOR ':' | 64 #define PATH_LIST_SEPARATOR ':' |
65 #define FILENAME_EQ(X,Y) (streq(X,Y)) | |
66 #endif | |
61 | 67 |
62 /* The default output file name. */ | 68 /* The default output file name. */ |
63 | 69 |
64 #define DEFAULT_OUTFILE "EBROWSE" | 70 #define DEFAULT_OUTFILE "EBROWSE" |
65 | 71 |
747 m = find_member (cls, name, var, sc, hash); | 753 m = find_member (cls, name, var, sc, hash); |
748 if (m == NULL) | 754 if (m == NULL) |
749 m = add_member (cls, name, var, sc, hash); | 755 m = add_member (cls, name, var, sc, hash); |
750 | 756 |
751 /* Have we seen a new filename? If so record that. */ | 757 /* Have we seen a new filename? If so record that. */ |
752 if (!cls->filename || !streq (cls->filename, filename)) | 758 if (!cls->filename || !FILENAME_EQ (cls->filename, filename)) |
753 m->filename = filename; | 759 m->filename = filename; |
754 | 760 |
755 m->regexp = regexp; | 761 m->regexp = regexp; |
756 m->pos = pos; | 762 m->pos = pos; |
757 m->flags = flags; | 763 m->flags = flags; |
818 } | 824 } |
819 | 825 |
820 if (!cls->sfilename) | 826 if (!cls->sfilename) |
821 cls->sfilename = filename; | 827 cls->sfilename = filename; |
822 | 828 |
823 if (!streq (cls->sfilename, filename)) | 829 if (!FILENAME_EQ (cls->sfilename, filename)) |
824 m->def_filename = filename; | 830 m->def_filename = filename; |
825 | 831 |
826 m->def_regexp = regexp; | 832 m->def_regexp = regexp; |
827 m->def_pos = pos; | 833 m->def_pos = pos; |
828 m->flags |= flags; | 834 m->flags |= flags; |
917 Override. This means that declarations must always be added to | 923 Override. This means that declarations must always be added to |
918 the symbol table before definitions. */ | 924 the symbol table before definitions. */ |
919 if (!found) | 925 if (!found) |
920 { | 926 { |
921 if (!global_symbols->filename | 927 if (!global_symbols->filename |
922 || !streq (global_symbols->filename, filename)) | 928 || !FILENAME_EQ (global_symbols->filename, filename)) |
923 m->filename = filename; | 929 m->filename = filename; |
924 | 930 |
925 m->regexp = regexp; | 931 m->regexp = regexp; |
926 m->pos = pos; | 932 m->pos = pos; |
927 m->vis = V_PUBLIC; | 933 m->vis = V_PUBLIC; |
3374 { | 3380 { |
3375 FILE *fp = NULL; | 3381 FILE *fp = NULL; |
3376 static char *buffer; | 3382 static char *buffer; |
3377 static int buffer_size; | 3383 static int buffer_size; |
3378 struct search_path *path; | 3384 struct search_path *path; |
3385 int flen = strlen (file) + 1; /* +1 for the slash */ | |
3379 | 3386 |
3380 filename = xstrdup (file); | 3387 filename = xstrdup (file); |
3381 | 3388 |
3382 for (path = search_path; path && fp == NULL; path = path->next) | 3389 for (path = search_path; path && fp == NULL; path = path->next) |
3383 { | 3390 { |
3384 int len = strlen (path->path); | 3391 int len = strlen (path->path) + flen; |
3385 | 3392 |
3386 if (len + 1 >= buffer_size) | 3393 if (len + 1 >= buffer_size) |
3387 { | 3394 { |
3388 buffer_size = max (len + 1, 2 * buffer_size); | 3395 buffer_size = max (len + 1, 2 * buffer_size); |
3389 buffer = (char *) xrealloc (buffer, buffer_size); | 3396 buffer = (char *) xrealloc (buffer, buffer_size); |
3483 inbuffer_size = nread + READ_CHUNK_SIZE + 1; | 3490 inbuffer_size = nread + READ_CHUNK_SIZE + 1; |
3484 inbuffer = (char *) xrealloc (inbuffer, inbuffer_size); | 3491 inbuffer = (char *) xrealloc (inbuffer, inbuffer_size); |
3485 } | 3492 } |
3486 | 3493 |
3487 nbytes = fread (inbuffer + nread, 1, READ_CHUNK_SIZE, fp); | 3494 nbytes = fread (inbuffer + nread, 1, READ_CHUNK_SIZE, fp); |
3495 if (nbytes <= 0) | |
3496 break; | |
3488 nread += nbytes; | 3497 nread += nbytes; |
3489 if (nbytes < READ_CHUNK_SIZE) | |
3490 break; | |
3491 } | 3498 } |
3499 if (nread < 0) | |
3500 nread = 0; | |
3492 inbuffer[nread] = '\0'; | 3501 inbuffer[nread] = '\0'; |
3493 | 3502 |
3494 /* Reinitialize scanner and parser for the new input file. */ | 3503 /* Reinitialize scanner and parser for the new input file. */ |
3495 re_init_scanner (); | 3504 re_init_scanner (); |
3496 re_init_parser (); | 3505 re_init_parser (); |