705 lines
30 KiB
Diff
705 lines
30 KiB
Diff
diff -up ghostscript-8.71/base/bcwin32.mak.SEARCH_HERE_FIRST ghostscript-8.71/base/bcwin32.mak
|
|
--- ghostscript-8.71/base/bcwin32.mak.SEARCH_HERE_FIRST 2009-11-05 22:24:30.000000000 +0000
|
|
+++ ghostscript-8.71/base/bcwin32.mak 2010-08-26 14:42:24.564965845 +0100
|
|
@@ -78,13 +78,10 @@ GS_LIB_DEFAULT=$(GSROOTDIR)/Resource/Ini
|
|
|
|
# Define whether or not searching for initialization files should always
|
|
# look in the current directory first. This leads to well-known security
|
|
-# and confusion problems, but users insist on it.
|
|
-# NOTE: this also affects searching for files named on the command line:
|
|
-# see the "File searching" section of Use.htm for full details.
|
|
-# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended.
|
|
+# and confusion problems, but may be convenient sometimes.
|
|
|
|
!ifndef SEARCH_HERE_FIRST
|
|
-SEARCH_HERE_FIRST=1
|
|
+SEARCH_HERE_FIRST=0
|
|
!endif
|
|
|
|
# Define the name of the interpreter initialization file.
|
|
diff -up ghostscript-8.71/base/macos-mcp.mak.SEARCH_HERE_FIRST ghostscript-8.71/base/macos-mcp.mak
|
|
--- ghostscript-8.71/base/macos-mcp.mak.SEARCH_HERE_FIRST 2009-11-05 22:24:30.000000000 +0000
|
|
+++ ghostscript-8.71/base/macos-mcp.mak 2010-08-26 14:42:24.565965206 +0100
|
|
@@ -53,12 +53,9 @@ GS_DOCDIR=:doc
|
|
|
|
# Define whether or not searching for initialization files should always
|
|
# look in the current directory first. This leads to well-known security
|
|
-# and confusion problems, but users insist on it.
|
|
-# NOTE: this also affects searching for files named on the command line:
|
|
-# see the "File searching" section of Use.htm for full details.
|
|
-# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended.
|
|
+# and confusion problems, but may be convenient sometimes.
|
|
|
|
-SEARCH_HERE_FIRST=1
|
|
+SEARCH_HERE_FIRST=0
|
|
|
|
# Define the name of the interpreter initialization file.
|
|
# (There is no reason to change this.)
|
|
diff -up ghostscript-8.71/base/macosx.mak.SEARCH_HERE_FIRST ghostscript-8.71/base/macosx.mak
|
|
--- ghostscript-8.71/base/macosx.mak.SEARCH_HERE_FIRST 2008-10-02 20:33:22.000000000 +0100
|
|
+++ ghostscript-8.71/base/macosx.mak 2010-08-26 14:42:24.567964998 +0100
|
|
@@ -78,12 +78,9 @@ GS_LIB_DEFAULT=$(gsdatadir)/Resource/Ini
|
|
|
|
# Define whether or not searching for initialization files should always
|
|
# look in the current directory first. This leads to well-known security
|
|
-# and confusion problems, but users insist on it.
|
|
-# NOTE: this also affects searching for files named on the command line:
|
|
-# see the "File searching" section of Use.htm for full details.
|
|
-# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended.
|
|
+# and confusion problems, but may be convenient sometimes.
|
|
|
|
-SEARCH_HERE_FIRST=1
|
|
+SEARCH_HERE_FIRST=0
|
|
|
|
# Define the name of the interpreter initialization file.
|
|
# (There is no reason to change this.)
|
|
diff -up ghostscript-8.71/base/Makefile.in.SEARCH_HERE_FIRST ghostscript-8.71/base/Makefile.in
|
|
--- ghostscript-8.71/base/Makefile.in.SEARCH_HERE_FIRST 2009-12-18 07:04:10.000000000 +0000
|
|
+++ ghostscript-8.71/base/Makefile.in 2010-08-26 14:42:24.568840684 +0100
|
|
@@ -96,12 +96,9 @@ GS_CACHE_DIR="~/.ghostscript/cache/"
|
|
|
|
# Define whether or not searching for initialization files should always
|
|
# look in the current directory first. This leads to well-known security
|
|
-# and confusion problems, but users insist on it.
|
|
-# NOTE: this also affects searching for files named on the command line:
|
|
-# see the "File searching" section of Use.htm for full details.
|
|
-# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended.
|
|
+# and confusion problems, but may be convenient sometimes.
|
|
|
|
-SEARCH_HERE_FIRST=1
|
|
+SEARCH_HERE_FIRST=0
|
|
|
|
# Define the name of the interpreter initialization file.
|
|
# (There is no reason to change this.)
|
|
diff -up ghostscript-8.71/base/msvclib.mak.SEARCH_HERE_FIRST ghostscript-8.71/base/msvclib.mak
|
|
--- ghostscript-8.71/base/msvclib.mak.SEARCH_HERE_FIRST 2010-01-07 10:53:36.000000000 +0000
|
|
+++ ghostscript-8.71/base/msvclib.mak 2010-08-26 14:42:24.570840275 +0100
|
|
@@ -49,13 +49,10 @@ GS_LIB_DEFAULT=$(GSROOTDIR)/Resource/Ini
|
|
|
|
# Define whether or not searching for initialization files should always
|
|
# look in the current directory first. This leads to well-known security
|
|
-# and confusion problems, but users insist on it.
|
|
-# NOTE: this also affects searching for files named on the command line:
|
|
-# see the "File searching" section of Use.htm for full details.
|
|
-# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended.
|
|
+# and confusion problems, but may be convenient sometimes.
|
|
|
|
!ifndef SEARCH_HERE_FIRST
|
|
-SEARCH_HERE_FIRST=1
|
|
+SEARCH_HERE_FIRST=0
|
|
!endif
|
|
|
|
# Define the name of the interpreter initialization file.
|
|
diff -up ghostscript-8.71/base/openvms.mak.SEARCH_HERE_FIRST ghostscript-8.71/base/openvms.mak
|
|
--- ghostscript-8.71/base/openvms.mak.SEARCH_HERE_FIRST 2009-11-05 22:24:30.000000000 +0000
|
|
+++ ghostscript-8.71/base/openvms.mak 2010-08-26 14:42:24.571840163 +0100
|
|
@@ -68,12 +68,9 @@ GS_LIB_DEFAULT=GS_ROOT:[RESOURCE.INIT],G
|
|
|
|
# Define whether or not searching for initialization files should always
|
|
# look in the current directory first. This leads to well-known security
|
|
-# and confusion problems, but users insist on it.
|
|
-# NOTE: this also affects searching for files named on the command line:
|
|
-# see the "File searching" section of Use.htm for full details.
|
|
-# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended.
|
|
+# and confusion problems, but may be convenient sometimes.
|
|
|
|
-SEARCH_HERE_FIRST=1
|
|
+SEARCH_HERE_FIRST=0
|
|
|
|
# Define the name of the interpreter initialization file.
|
|
# (There is no reason to change this.)
|
|
diff -up ghostscript-8.71/base/openvms.mmk.SEARCH_HERE_FIRST ghostscript-8.71/base/openvms.mmk
|
|
--- ghostscript-8.71/base/openvms.mmk.SEARCH_HERE_FIRST 2009-01-08 09:17:18.000000000 +0000
|
|
+++ ghostscript-8.71/base/openvms.mmk 2010-08-26 14:42:24.572840641 +0100
|
|
@@ -73,12 +73,9 @@ GS_LIB_DEFAULT=GS_LIB
|
|
|
|
# Define whether or not searching for initialization files should always
|
|
# look in the current directory first. This leads to well-known security
|
|
-# and confusion problems, but users insist on it.
|
|
-# NOTE: this also affects searching for files named on the command line:
|
|
-# see the "File searching" section of Use.htm for full details.
|
|
-# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended.
|
|
+# and confusion problems, but may be convenient sometimes.
|
|
|
|
-SEARCH_HERE_FIRST=1
|
|
+SEARCH_HERE_FIRST=0
|
|
|
|
# Define the name of the interpreter initialization file.
|
|
# (There is no reason to change this.)
|
|
diff -up ghostscript-8.71/base/ugcclib.mak.SEARCH_HERE_FIRST ghostscript-8.71/base/ugcclib.mak
|
|
--- ghostscript-8.71/base/ugcclib.mak.SEARCH_HERE_FIRST 2008-11-05 20:41:22.000000000 +0000
|
|
+++ ghostscript-8.71/base/ugcclib.mak 2010-08-26 14:42:24.573840607 +0100
|
|
@@ -30,7 +30,7 @@ gsdir = /usr/local/share/ghostscript
|
|
gsdatadir = $(gsdir)/$(GS_DOT_VERSION)
|
|
GS_DOCDIR=$(gsdatadir)/doc
|
|
GS_LIB_DEFAULT=$(gsdatadir)/Resource/Init:$(gsdatadir)/lib:$(gsdatadir)/Resource/Font
|
|
-SEARCH_HERE_FIRST=1
|
|
+SEARCH_HERE_FIRST=0
|
|
GS_INIT=gs_init.ps
|
|
|
|
#GENOPT=-DDEBUG
|
|
diff -up ghostscript-8.71/base/unixansi.mak.SEARCH_HERE_FIRST ghostscript-8.71/base/unixansi.mak
|
|
--- ghostscript-8.71/base/unixansi.mak.SEARCH_HERE_FIRST 2009-11-05 22:24:30.000000000 +0000
|
|
+++ ghostscript-8.71/base/unixansi.mak 2010-08-26 14:42:24.575840435 +0100
|
|
@@ -73,12 +73,9 @@ GS_LIB_DEFAULT=$(gsdatadir)/Resource/Ini
|
|
|
|
# Define whether or not searching for initialization files should always
|
|
# look in the current directory first. This leads to well-known security
|
|
-# and confusion problems, but users insist on it.
|
|
-# NOTE: this also affects searching for files named on the command line:
|
|
-# see the "File searching" section of Use.htm for full details.
|
|
-# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended.
|
|
+# and confusion problems, but may be convenient sometimes.
|
|
|
|
-SEARCH_HERE_FIRST=1
|
|
+SEARCH_HERE_FIRST=0
|
|
|
|
# Define the name of the interpreter initialization file.
|
|
# (There is no reason to change this.)
|
|
diff -up ghostscript-8.71/base/unix-gcc.mak.SEARCH_HERE_FIRST ghostscript-8.71/base/unix-gcc.mak
|
|
--- ghostscript-8.71/base/unix-gcc.mak.SEARCH_HERE_FIRST 2009-11-11 15:50:28.000000000 +0000
|
|
+++ ghostscript-8.71/base/unix-gcc.mak 2010-08-26 14:42:24.576840199 +0100
|
|
@@ -77,12 +77,9 @@ GS_LIB_DEFAULT=$(gsdatadir)/Resource/Ini
|
|
|
|
# Define whether or not searching for initialization files should always
|
|
# look in the current directory first. This leads to well-known security
|
|
-# and confusion problems, but users insist on it.
|
|
-# NOTE: this also affects searching for files named on the command line:
|
|
-# see the "File searching" section of Use.htm for full details.
|
|
-# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended.
|
|
+# and confusion problems, but may be convenient sometimes.
|
|
|
|
-SEARCH_HERE_FIRST=1
|
|
+SEARCH_HERE_FIRST=0
|
|
|
|
# Define the name of the interpreter initialization file.
|
|
# (There is no reason to change this.)
|
|
diff -up ghostscript-8.71/base/watclib.mak.SEARCH_HERE_FIRST ghostscript-8.71/base/watclib.mak
|
|
--- ghostscript-8.71/base/watclib.mak.SEARCH_HERE_FIRST 2009-01-08 09:17:18.000000000 +0000
|
|
+++ ghostscript-8.71/base/watclib.mak 2010-08-26 14:42:24.577840314 +0100
|
|
@@ -20,7 +20,7 @@ AROOTDIR=c:/gs
|
|
GSROOTDIR=$(AROOTDIR)/gs$(GS_DOT_VERSION)
|
|
GS_DOCDIR=$(GSROOTDIR)/doc
|
|
GS_LIB_DEFAULT=$(GSROOTDIR)/Resource/Init\;$(GSROOTDIR)/lib\;$(GSROOTDIR)/Resource/Font\;$(AROOTDIR)/fonts
|
|
-SEARCH_HERE_FIRST=1
|
|
+SEARCH_HERE_FIRST=0
|
|
GS_INIT=gs_init.ps
|
|
|
|
!ifndef DEBUG
|
|
diff -up ghostscript-8.71/base/watcw32.mak.SEARCH_HERE_FIRST ghostscript-8.71/base/watcw32.mak
|
|
--- ghostscript-8.71/base/watcw32.mak.SEARCH_HERE_FIRST 2009-11-05 22:24:30.000000000 +0000
|
|
+++ ghostscript-8.71/base/watcw32.mak 2010-08-26 14:42:24.578840893 +0100
|
|
@@ -54,11 +54,8 @@ GS_LIB_DEFAULT=$(GSROOTDIR)/Resource/Ini
|
|
# Define whether or not searching for initialization files should always
|
|
# look in the current directory first. This leads to well-known security
|
|
# and confusion problems, but users insist on it.
|
|
-# NOTE: this also affects searching for files named on the command line:
|
|
-# see the "File searching" section of Use.htm for full details.
|
|
-# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended.
|
|
|
|
-SEARCH_HERE_FIRST=1
|
|
+SEARCH_HERE_FIRST=0
|
|
|
|
# Define the name of the interpreter initialization file.
|
|
# (There is no reason to change this.)
|
|
diff -up ghostscript-8.71/doc/Use.htm.SEARCH_HERE_FIRST ghostscript-8.71/doc/Use.htm
|
|
--- ghostscript-8.71/doc/Use.htm.SEARCH_HERE_FIRST 2010-02-10 18:17:48.000000000 +0000
|
|
+++ ghostscript-8.71/doc/Use.htm 2010-08-26 14:42:24.583840122 +0100
|
|
@@ -823,8 +823,8 @@ file name specifies an absolute path.
|
|
using the name given. Otherwise it tries directories in this order:
|
|
|
|
<ol>
|
|
-<li>The current directory (unless disabled by the
|
|
-<a href="#P-_switch"><code>-P-</code> switch</a>);
|
|
+<li>The current directory if enabled by the
|
|
+<a href="#P-_switch"><code>-P</code> switch</a>;
|
|
|
|
<li>The directories specified by <a href="#I_switch"><code>-I</code>
|
|
switches</a> in the command line, if any;
|
|
@@ -847,13 +847,10 @@ into the executable ;
|
|
directory or a list of directories separated by a character appropriate for
|
|
the operating system ("<code>:</code>" on Unix systems,
|
|
"<code>,</code>" on VMS systems, and
|
|
-"<code>;</code>" on MS Windows systems). We think that trying
|
|
-the current directory first is a very bad idea -- it opens serious security
|
|
-loopholes and can lead to very confusing errors if one has more than one
|
|
-version of Ghostscript in one's environment -- but when we attempted to
|
|
-change it, users insisted that we change it back. You can disable looking
|
|
-in the current directory first by using the
|
|
-<a href="#P_switch"><code>-P-</code> switch</a>.
|
|
+"<code>;</code>" on MS Windows systems).
|
|
+By default, Ghostscript no longer searches the current directory first
|
|
+but provides <a href="#P_switch"><code>-P</code> switch</a> for a degree
|
|
+of backward compatibility.
|
|
|
|
<p>
|
|
Note that Ghostscript does not use this file searching algorithm for the
|
|
@@ -2061,14 +2058,14 @@ for library files.
|
|
<dl>
|
|
<dt><a name="P_switch"></a><code>-P</code>
|
|
<dd>Makes Ghostscript look first in the current directory for library
|
|
-files. This is currently the default.
|
|
+files.
|
|
</dl>
|
|
|
|
<dl>
|
|
<dt><a name="P-_switch"></a><code>-P-</code>
|
|
<dd>Makes Ghostscript <b><em>not</em></b> look first in the current
|
|
directory for library files (unless, of course, the first explicitly
|
|
-supplied directory is "<code>.</code>").
|
|
+supplied directory is "<code>.</code>"). This is now the default.
|
|
</dl>
|
|
|
|
<h4><a name="Parameters"></a>Setting parameters</h4>
|
|
diff -up ghostscript-8.71/man/gs.1.SEARCH_HERE_FIRST ghostscript-8.71/man/gs.1
|
|
--- ghostscript-8.71/man/gs.1.SEARCH_HERE_FIRST 2010-02-10 18:17:48.000000000 +0000
|
|
+++ ghostscript-8.71/man/gs.1 2010-08-26 14:42:24.586965259 +0100
|
|
@@ -208,6 +208,12 @@ whereas \fB\-sname=35\fR is equivalent t
|
|
.br
|
|
/name (35) def
|
|
.TP
|
|
+.B \-P
|
|
+Makes Ghostscript to look first in the current directory for library files.
|
|
+By default, Ghostscript no longer looks in the current directory,
|
|
+unless, of course, the first explicitly supplied directory is "." in \fB-I\fR.
|
|
+See also the \fBINITIALIZATION FILES\fR section below, and bundled
|
|
+\fBUse.htm\fR for detailed discussion on search paths and how Ghostcript finds files.
|
|
.B \-q
|
|
Quiet startup: suppress normal startup messages, and also do the
|
|
equivalent of \fB\-dQUIET\fR.
|
|
diff -up ghostscript-8.71/psi/msvc32.mak.SEARCH_HERE_FIRST ghostscript-8.71/psi/msvc32.mak
|
|
--- ghostscript-8.71/psi/msvc32.mak.SEARCH_HERE_FIRST 2010-02-02 18:14:37.000000000 +0000
|
|
+++ ghostscript-8.71/psi/msvc32.mak 2010-08-26 14:42:24.588840343 +0100
|
|
@@ -100,13 +100,10 @@ GS_LIB_DEFAULT=$(GSROOTDIR)/Resource/Ini
|
|
|
|
# Define whether or not searching for initialization files should always
|
|
# look in the current directory first. This leads to well-known security
|
|
-# and confusion problems, but users insist on it.
|
|
-# NOTE: this also affects searching for files named on the command line:
|
|
-# see the "File searching" section of Use.htm for full details.
|
|
-# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended.
|
|
+# and confusion problems, but may be convenient sometimes.
|
|
|
|
!ifndef SEARCH_HERE_FIRST
|
|
-SEARCH_HERE_FIRST=1
|
|
+SEARCH_HERE_FIRST=0
|
|
!endif
|
|
|
|
# Define the name of the interpreter initialization file.
|
|
diff -up ghostscript-8.71/psi/os2.mak.SEARCH_HERE_FIRST ghostscript-8.71/psi/os2.mak
|
|
--- ghostscript-8.71/psi/os2.mak.SEARCH_HERE_FIRST 2009-11-05 22:24:30.000000000 +0000
|
|
+++ ghostscript-8.71/psi/os2.mak 2010-08-26 14:42:24.590840867 +0100
|
|
@@ -54,12 +54,9 @@ GS_LIB_DEFAULT=$(GSROOTDIR)/Resource/Ini
|
|
|
|
# Define whether or not searching for initialization files should always
|
|
# look in the current directory first. This leads to well-known security
|
|
-# and confusion problems, but users insist on it.
|
|
-# NOTE: this also affects searching for files named on the command line:
|
|
-# see the "File searching" section of Use.htm for full details.
|
|
-# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended.
|
|
+# and confusion problems, but may be convenient sometimes.
|
|
|
|
-SEARCH_HERE_FIRST=1
|
|
+SEARCH_HERE_FIRST=0
|
|
|
|
# Define the name of the interpreter initialization file.
|
|
# (There is no reason to change this.)
|
|
diff -up ghostscript-8.71/psi/zfile.c.SEARCH_HERE_FIRST ghostscript-8.71/psi/zfile.c
|
|
--- ghostscript-8.71/psi/zfile.c.SEARCH_HERE_FIRST 2009-10-04 13:42:07.000000000 +0100
|
|
+++ ghostscript-8.71/psi/zfile.c 2010-08-26 14:42:24.593842556 +0100
|
|
@@ -486,8 +486,13 @@ zstatus(i_ctx_t *i_ctx_p)
|
|
struct stat fstat;
|
|
int code = parse_file_name(op, &pname, i_ctx_p->LockFilePermissions);
|
|
|
|
- if (code < 0)
|
|
+ if (code < 0) {
|
|
+ if (code == e_undefinedfilename) {
|
|
+ make_bool(op, 0);
|
|
+ code = 0;
|
|
+ }
|
|
return code;
|
|
+ }
|
|
code = gs_terminate_file_name(&pname, imemory, "status");
|
|
if (code < 0)
|
|
return code;
|
|
@@ -903,6 +908,91 @@ check_file_permissions_aux(i_ctx_t *i_ct
|
|
}
|
|
|
|
|
|
+/* return zero for success, -ve for error, +1 for continue */
|
|
+static int
|
|
+lib_file_open_search_with_no_combine(gs_file_path_ptr lib_path, const gs_memory_t *mem, i_ctx_t *i_ctx_p,
|
|
+ const char *fname, uint flen, char *buffer, int blen, uint *pclen, ref *pfile,
|
|
+ gx_io_device *iodev, bool starting_arg_file, char *fmode)
|
|
+{
|
|
+ stream *s;
|
|
+ uint blen1 = blen;
|
|
+ if (gp_file_name_reduce(fname, flen, buffer, &blen1) != gp_combine_success)
|
|
+ goto skip;
|
|
+ if (iodev_os_open_file(iodev, (const char *)buffer, blen1,
|
|
+ (const char *)fmode, &s, (gs_memory_t *)mem) == 0) {
|
|
+ if (starting_arg_file ||
|
|
+ check_file_permissions_aux(i_ctx_p, buffer, blen1) >= 0) {
|
|
+ *pclen = blen1;
|
|
+ make_stream_file(pfile, s, "r");
|
|
+ return 0;
|
|
+ }
|
|
+ sclose(s);
|
|
+ return_error(e_invalidfileaccess);
|
|
+ }
|
|
+ skip:;
|
|
+ return 1;
|
|
+}
|
|
+
|
|
+/* return zero for success, -ve for error, +1 for continue */
|
|
+static int
|
|
+lib_file_open_search_with_combine(gs_file_path_ptr lib_path, const gs_memory_t *mem, i_ctx_t *i_ctx_p,
|
|
+ const char *fname, uint flen, char *buffer, int blen, uint *pclen, ref *pfile,
|
|
+ gx_io_device *iodev, bool starting_arg_file, char *fmode)
|
|
+{
|
|
+ stream *s;
|
|
+ const gs_file_path *pfpath = lib_path;
|
|
+ uint pi;
|
|
+
|
|
+ for (pi = 0; pi < r_size(&pfpath->list); ++pi) {
|
|
+ const ref *prdir = pfpath->list.value.refs + pi;
|
|
+ const char *pstr = (const char *)prdir->value.const_bytes;
|
|
+ uint plen = r_size(prdir), blen1 = blen;
|
|
+ gs_parsed_file_name_t pname;
|
|
+ gp_file_name_combine_result r;
|
|
+
|
|
+ /* We need to concatenate and parse the file name here
|
|
+ * if this path has a %device% prefix. */
|
|
+ if (pstr[0] == '%') {
|
|
+ int code;
|
|
+
|
|
+ /* We concatenate directly since gp_file_name_combine_*
|
|
+ * rules are not correct for other devices such as %rom% */
|
|
+ code = gs_parse_file_name(&pname, pstr, plen);
|
|
+ if (code < 0)
|
|
+ continue;
|
|
+ memcpy(buffer, pname.fname, pname.len);
|
|
+ memcpy(buffer+pname.len, fname, flen);
|
|
+ code = pname.iodev->procs.open_file(pname.iodev, buffer, pname.len + flen, fmode,
|
|
+ &s, (gs_memory_t *)mem);
|
|
+ if (code < 0)
|
|
+ continue;
|
|
+ make_stream_file(pfile, s, "r");
|
|
+ /* fill in the buffer with the device concatenated */
|
|
+ memcpy(buffer, pstr, plen);
|
|
+ memcpy(buffer+plen, fname, flen);
|
|
+ *pclen = plen + flen;
|
|
+ return 0;
|
|
+ } else {
|
|
+ r = gp_file_name_combine(pstr, plen,
|
|
+ fname, flen, false, buffer, &blen1);
|
|
+ if (r != gp_combine_success)
|
|
+ continue;
|
|
+ if (iodev_os_open_file(iodev, (const char *)buffer, blen1, (const char *)fmode,
|
|
+ &s, (gs_memory_t *)mem) == 0) {
|
|
+ if (starting_arg_file ||
|
|
+ check_file_permissions_aux(i_ctx_p, buffer, blen1) >= 0) {
|
|
+ *pclen = blen1;
|
|
+ make_stream_file(pfile, s, "r");
|
|
+ return 0;
|
|
+ }
|
|
+ sclose(s);
|
|
+ return_error(e_invalidfileaccess);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ return 1;
|
|
+}
|
|
+
|
|
/* Return a file object of of the file searched for using the search paths. */
|
|
/* The fname cannot contain a device part (%...%) but the lib paths might. */
|
|
/* The startup code calls this to open the initialization file gs_init.ps. */
|
|
@@ -917,8 +1007,9 @@ lib_file_open(gs_file_path_ptr lib_path
|
|
bool search_with_no_combine = false;
|
|
bool search_with_combine = false;
|
|
char fmode[4] = { 'r', 0, 0, 0 }; /* room for binary suffix */
|
|
- stream *s;
|
|
gx_io_device *iodev = iodev_default;
|
|
+ gs_main_instance *minst = get_minst_from_memory(mem);
|
|
+ int code;
|
|
|
|
/* when starting arg files (@ files) iodev_default is not yet set */
|
|
if (iodev == 0)
|
|
@@ -932,75 +1023,36 @@ lib_file_open(gs_file_path_ptr lib_path
|
|
search_with_no_combine = starting_arg_file;
|
|
search_with_combine = true;
|
|
}
|
|
- if (search_with_no_combine) {
|
|
- uint blen1 = blen;
|
|
-
|
|
- if (gp_file_name_reduce(fname, flen, buffer, &blen1) != gp_combine_success)
|
|
- goto skip;
|
|
- if (iodev_os_open_file(iodev, (const char *)buffer, blen1,
|
|
- (const char *)fmode, &s, (gs_memory_t *)mem) == 0) {
|
|
- if (starting_arg_file ||
|
|
- check_file_permissions_aux(i_ctx_p, buffer, blen1) >= 0) {
|
|
- *pclen = blen1;
|
|
- make_stream_file(pfile, s, "r");
|
|
- return 0;
|
|
- }
|
|
- sclose(s);
|
|
- return_error(e_invalidfileaccess);
|
|
- }
|
|
- skip:;
|
|
- }
|
|
- if (search_with_combine) {
|
|
- const gs_file_path *pfpath = lib_path;
|
|
- uint pi;
|
|
-
|
|
- for (pi = 0; pi < r_size(&pfpath->list); ++pi) {
|
|
- const ref *prdir = pfpath->list.value.refs + pi;
|
|
- const char *pstr = (const char *)prdir->value.const_bytes;
|
|
- uint plen = r_size(prdir), blen1 = blen;
|
|
- gs_parsed_file_name_t pname;
|
|
- gp_file_name_combine_result r;
|
|
-
|
|
- /* We need to concatenate and parse the file name here
|
|
- * if this path has a %device% prefix. */
|
|
- if (pstr[0] == '%') {
|
|
- int code;
|
|
-
|
|
- /* We concatenate directly since gp_file_name_combine_*
|
|
- * rules are not correct for other devices such as %rom% */
|
|
- code = gs_parse_file_name(&pname, pstr, plen);
|
|
- if (code < 0)
|
|
- continue;
|
|
- memcpy(buffer, pname.fname, pname.len);
|
|
- memcpy(buffer+pname.len, fname, flen);
|
|
- code = pname.iodev->procs.open_file(pname.iodev, buffer, pname.len + flen, fmode,
|
|
- &s, (gs_memory_t *)mem);
|
|
- if (code < 0)
|
|
- continue;
|
|
- make_stream_file(pfile, s, "r");
|
|
- /* fill in the buffer with the device concatenated */
|
|
- memcpy(buffer, pstr, plen);
|
|
- memcpy(buffer+plen, fname, flen);
|
|
- *pclen = plen + flen;
|
|
- return 0;
|
|
- } else {
|
|
- r = gp_file_name_combine(pstr, plen,
|
|
- fname, flen, false, buffer, &blen1);
|
|
- if (r != gp_combine_success)
|
|
- continue;
|
|
- if (iodev_os_open_file(iodev, (const char *)buffer, blen1, (const char *)fmode,
|
|
- &s, (gs_memory_t *)mem) == 0) {
|
|
- if (starting_arg_file ||
|
|
- check_file_permissions_aux(i_ctx_p, buffer, blen1) >= 0) {
|
|
- *pclen = blen1;
|
|
- make_stream_file(pfile, s, "r");
|
|
- return 0;
|
|
- }
|
|
- sclose(s);
|
|
- return_error(e_invalidfileaccess);
|
|
- }
|
|
- }
|
|
- }
|
|
+ if (minst->search_here_first) {
|
|
+ if (search_with_no_combine) {
|
|
+ code = lib_file_open_search_with_no_combine(lib_path, mem, i_ctx_p,
|
|
+ fname, flen, buffer, blen, pclen, pfile,
|
|
+ iodev, starting_arg_file, fmode);
|
|
+ if (code <= 0) /* +ve means continue continue */
|
|
+ return code;
|
|
+ }
|
|
+ if (search_with_combine) {
|
|
+ code = lib_file_open_search_with_combine(lib_path, mem, i_ctx_p,
|
|
+ fname, flen, buffer, blen, pclen, pfile,
|
|
+ iodev, starting_arg_file, fmode);
|
|
+ if (code <= 0) /* +ve means continue searching */
|
|
+ return code;
|
|
+ }
|
|
+ } else {
|
|
+ if (search_with_combine) {
|
|
+ code = lib_file_open_search_with_combine(lib_path, mem, i_ctx_p,
|
|
+ fname, flen, buffer, blen, pclen, pfile,
|
|
+ iodev, starting_arg_file, fmode);
|
|
+ if (code <= 0) /* +ve means continue searching */
|
|
+ return code;
|
|
+ }
|
|
+ if (search_with_no_combine) {
|
|
+ code = lib_file_open_search_with_no_combine(lib_path, mem, i_ctx_p,
|
|
+ fname, flen, buffer, blen, pclen, pfile,
|
|
+ iodev, starting_arg_file, fmode);
|
|
+ if (code <= 0) /* +ve means continue searching */
|
|
+ return code;
|
|
+ }
|
|
}
|
|
return_error(e_undefinedfilename);
|
|
}
|
|
diff -up ghostscript-8.71/Resource/Init/gs_fonts.ps.SEARCH_HERE_FIRST ghostscript-8.71/Resource/Init/gs_fonts.ps
|
|
--- ghostscript-8.71/Resource/Init/gs_fonts.ps.SEARCH_HERE_FIRST 2008-08-08 05:22:38.000000000 +0100
|
|
+++ ghostscript-8.71/Resource/Init/gs_fonts.ps 2010-08-26 14:42:24.606840016 +0100
|
|
@@ -939,7 +939,7 @@ $error /SubstituteFont { } put
|
|
if
|
|
}
|
|
{ % Font file name
|
|
- .loadfontloop { true exit } if
|
|
+ //true .loadfontloop { //true exit } if
|
|
}
|
|
ifelse
|
|
}
|
|
@@ -982,39 +982,47 @@ $error /SubstituteFont { } put
|
|
/.genericrfn where {
|
|
pop
|
|
pop dup .fonttempstring /FontResourceDir getsystemparam .genericrfn
|
|
- .loadfontloop {
|
|
+ //false .loadfontloop {
|
|
//true
|
|
} {
|
|
- dup .nametostring .loadfontloop
|
|
+ dup .nametostring
|
|
+ //true .loadfontloop
|
|
} ifelse
|
|
} {
|
|
- .loadfontloop
|
|
+ //true .loadfontloop
|
|
} ifelse
|
|
} bind def
|
|
-/.loadfontloop { % <fontname> <filename> .loadfontloop
|
|
+/.loadfontloop { % <fontname> <filename> <libflag> .loadfontloop
|
|
% <font> true
|
|
% -or-
|
|
% <fontname> false
|
|
% See above regarding the use of 'loop'.
|
|
{ % Is the font name a string?
|
|
- dup type /stringtype ne
|
|
- { QUIET not
|
|
+ 1 index type /stringtype ne
|
|
+ { pop
|
|
+ QUIET not
|
|
{ (Can't find font with non-string name: ) print dup =only (.) = flush
|
|
}
|
|
- if pop false exit
|
|
- }
|
|
- if
|
|
- % Can we open the file?
|
|
- findlibfile not
|
|
- { QUIET not
|
|
+ if pop //false exit
|
|
+ } if
|
|
+
|
|
+ % check <libflag>
|
|
+ {
|
|
+ findlibfile not
|
|
+ } {
|
|
+ dup (r) { file } stopped {
|
|
+ pop pop //true
|
|
+ } {
|
|
+ //false
|
|
+ } ifelse
|
|
+ } ifelse {
|
|
+ QUIET not
|
|
{ (Can't find \(or can't open\) font file ) print dup print
|
|
(.) = flush
|
|
}
|
|
if pop false exit
|
|
- }
|
|
- if
|
|
-
|
|
- % Stack: fontname fontfilename fontfile
|
|
+ } if
|
|
+ % Stack: fontname fontfilename fontfile
|
|
DISKFONTS
|
|
{ .currentglobal true .setglobal
|
|
2 index (r) file
|
|
diff -up ghostscript-8.71/Resource/Init/gs_res.ps.SEARCH_HERE_FIRST ghostscript-8.71/Resource/Init/gs_res.ps
|
|
--- ghostscript-8.71/Resource/Init/gs_res.ps.SEARCH_HERE_FIRST 2010-01-31 20:30:13.000000000 +0000
|
|
+++ ghostscript-8.71/Resource/Init/gs_res.ps 2010-08-26 14:43:57.159839992 +0100
|
|
@@ -287,7 +287,8 @@ systemdict begin
|
|
} {
|
|
(Resource) search {
|
|
exch concatstrings
|
|
- exch 0 1 getinterval concatstrings exit
|
|
+ exch pop
|
|
+ .file_name_separator concatstrings exit
|
|
} {
|
|
pop
|
|
} ifelse
|
|
@@ -557,46 +558,29 @@ status {
|
|
{ forall } 0 get
|
|
currentdict end 2 .execn begin
|
|
} bind
|
|
-/.file_name_is_iodevice_or_absolute
|
|
-{ {
|
|
- dup length 0 gt {
|
|
- dup 0 get (%) 0 get eq {
|
|
- pop true exit
|
|
- } if
|
|
- } if
|
|
- .file_name_is_absolute exit
|
|
- } loop
|
|
-} bind def
|
|
-/ResourceFileName
|
|
- { % /in (scr)
|
|
- exch //.rfnstring cvs % (scr) (n)
|
|
- /GenericResourcePathSep getsystemparam exch % (scr) (/) (n)
|
|
- Category .namestring % (scr) (/) (n) (c)
|
|
- 3 1 roll % (scr) (c) (/) (n)
|
|
- concatstrings concatstrings % (scr) (c/n)
|
|
- /GenericResourceDir getsystemparam //.file_name_is_iodevice_or_absolute exec not {
|
|
- /GenericResourceDir getsystemparam exch concatstrings
|
|
- findlibfile
|
|
- { % (scr) (p/c/n) file
|
|
- pop exch copy true % (p/c/n) true
|
|
- } { % (scr) (c/n)
|
|
- false % (scr) (c/n) false
|
|
- } ifelse
|
|
- } { % (scr) (c/n)
|
|
- false % (scr) (c/n) false
|
|
- } ifelse
|
|
- not { % (scr) (c/n)
|
|
- /GenericResourceDir getsystemparam % (scr) (c/n) (d/)
|
|
- dup length exch % (scr) (c/n) Ld (d/)
|
|
- 3 index copy pop % (scr') (c/n) Ld
|
|
- 1 index length % (scr') (c/n) Ld Lcn
|
|
- 3 index 3 copy pop % (scr') (c/n) Ld Lcn (scr') Ld Lcn
|
|
- getinterval % (scr') (c/n) Ld Lcn (scr[Ld:Lcn])
|
|
- 4 3 roll exch % (scr') Ld Lcn (c/n) (scr[Ld:Lcn])
|
|
- copy pop % (scr'') Ld Lcn
|
|
- add 0 exch getinterval % (scr''[0:Ld+Lcn])
|
|
- } if
|
|
- } bind
|
|
+
|
|
+/ResourceFileName { % /in (scr) --> (p/c/n)
|
|
+ exch //.rfnstring cvs % (scr) (n)
|
|
+ /GenericResourcePathSep getsystemparam exch % (scr) (/) (n)
|
|
+ Category .namestring % (scr) (/) (n) (c)
|
|
+ 3 1 roll % (scr) (c) (/) (n)
|
|
+ concatstrings concatstrings % (scr) (c/n)
|
|
+ /GenericResourceDir getsystemparam 1 index % (scr) (c/n) (p/) (c/n)
|
|
+ concatstrings % (scr) (c/n) (p/c/n)
|
|
+ dup status {
|
|
+ pop pop pop pop exch pop % (scr) (p/c/n)
|
|
+ } {
|
|
+ exch % (scr) (p/c/n) (c/n)
|
|
+ .libfile {
|
|
+ dup .filename pop % (scr) (p/c/n) file (p/c/n')
|
|
+ exch closefile % (scr) (p/c/n) (p/c/n')
|
|
+ exch pop % (scr) (p/c/n')
|
|
+ } {
|
|
+ pop % (scr) (p/c/n)
|
|
+ } ifelse
|
|
+ } ifelse
|
|
+ exch copy % (p/c/n)
|
|
+} bind
|
|
|
|
% Additional entries
|
|
|
|
diff -up ghostscript-8.71/toolbin/msvcxml.bat.SEARCH_HERE_FIRST ghostscript-8.71/toolbin/msvcxml.bat
|
|
--- ghostscript-8.71/toolbin/msvcxml.bat.SEARCH_HERE_FIRST 2009-01-26 17:16:47.000000000 +0000
|
|
+++ ghostscript-8.71/toolbin/msvcxml.bat 2010-08-26 14:42:24.619840359 +0100
|
|
@@ -1428,7 +1428,7 @@ echo ^<UserMacro Name="GS_DOCDIR" Valu
|
|
echo ^<UserMacro Name="GS_INIT" Value="gs_init.ps" /^>
|
|
echo ^<UserMacro Name="GS_LIB_DEFAULT" Value="$(GSROOTDIR)/lib;$(GSROOTDIR)/Resource/Font;$(AROOTDIR)/fonts" /^>
|
|
echo ^<UserMacro Name="GS_REVISION" Value="$(GS_VERSION)" /^>
|
|
-echo ^<UserMacro Name="SEARCH_HERE_FIRST" Value="1" /^>
|
|
+echo ^<UserMacro Name="SEARCH_HERE_FIRST" Value="0" /^>
|
|
echo ^</VisualStudioPropertySheet^>
|
|
goto end
|
|
|