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 ();