This is search.c in view mode; [Download] [Up]
/* * The search routine takes a directory list, separated by PATHSEP, and * tries to open a file. Null directory components indicate current * directory. In an environment variable, null directory components * indicate substitution of the default path list at that point. */ #include "dvips.h" /* The copyright notice in that file is included too! */ #include <kpathsea/tex-file.h> #include <kpathsea/tex-glyph.h> extern char name[]; /* * * We hope MAXPATHLEN is enough -- only rudimentary checking is done! */ #ifdef SECURE extern Boolean secure; #endif #ifdef DEBUG extern integer debug_flag; #endif /* DEBUG */ extern char *mfmode ; extern int actualdpi ; string realnameoffile ; FILE * search(format, file, mode) kpse_file_format_type format; char *file, *mode ; { FILE *ret; string found_name; #ifdef SECURE /* This change suggested by maj@cl.cam.ac.uk to disallow reading of arbitrary files. */ if (secure && kpse_absolute_p (file)) return NULL; #endif /* Most file looked for through here must exist -- the exception is VF's. Bitmap fonts go through pksearch. */ found_name = kpse_find_file (file, format, format != vfpath); if (found_name) { strcpy (name, found_name); ret = fopen (name, mode); if (!ret) FATAL_PERROR (name); realnameoffile = name; } else ret = NULL; return ret; } /* end search */ FILE * pksearch(path, file, mode, dpi, name_ret, dpi_ret) char *path, *file, *mode ; char **name_ret ; halfword dpi; int *dpi_ret ; { FILE *ret; kpse_glyph_file_type font_file; string found_name = kpse_find_pk (file, dpi, &font_file); if (found_name) { strcpy (name, found_name); ret = fopen (name, mode); if (!ret) FATAL_PERROR (name); realnameoffile = name; *name_ret = font_file.name; *dpi_ret = font_file.dpi; } else ret = NULL; return ret; } /* end search */ /* do we report file openings? */ #ifdef DEBUG # ifdef fopen # undef fopen # endif # ifdef VMCMS /* IBM: VM/CMS */ # define fopen cmsfopen # endif /* IBM: VM/CMS */ FILE *my_real_fopen(n, t) register char *n, *t ; { FILE *tf ; if (dd(D_FILES)) { fprintf(stderr, "<%s(%s)> ", n, t) ; tf = fopen(n, t) ; if (tf == 0) fprintf(stderr, "failed\n") ; else fprintf(stderr, "succeeded\n") ; } else tf = fopen(n, t) ; #ifdef OS2 if (tf == (FILE *)NULL) tf = fat_fopen(n, t); /* try again with filename truncated to 8.3 */ #endif return tf ; } #endif #ifdef OS2 /* truncate filename at end of fname to FAT filesystem 8.3 limit */ /* if truncated, return fopen() with new name */ FILE *fat_fopen(fname, t) char *fname, *t; { char *np; /* pointer to name within path */ char nbuf[13], *ns, *nd; char n[MAXPATHLEN]; int ni, ne; FILE *tf; strcpy(n, fname); for (ns=n; *ns; ns++) { if (*ns=='/') *ns=DIRSEP; } np = strrchr(n,DIRSEP); if (np==(char *)NULL) np = n; else np++; /* fail if it contains more than one '.' */ ni = 0; for (ns=np; *ns; ns++) { if (*ns=='.') ni++; } if (ni>1) return (FILE *)NULL; /* copy it to nbuf, truncating to 8.3 */ ns = np; nd = nbuf; ni = 0; while ((*ns!='.') && (*ns) && (ni<8)) { *nd++ = *ns++; ni++; } while ((*ns!='.') && (*ns)) { ns++; ni++; } ne = 0; if (*ns=='.') { *nd++ = *ns++; while ((*ns!='.') && (*ns) && (ne<3)) { *nd++ = *ns++; ne++; } while (*ns) { ns++; ne++; } } *nd++='\0'; if ((ni>8) || (ne>3)) { strcpy(np,nbuf); /* now code copied from my_real_fopen() */ if (dd(D_FILES)) { fprintf(stderr, "<%s(%s)> ", n, t) ; tf = fopen(n, t) ; if (tf == 0) fprintf(stderr, "failed\n") ; else fprintf(stderr, "succeeded\n") ; } else tf = fopen(n, t) ; return tf; } return (FILE *)NULL; } #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.