1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
|
Description: Eliminate faulty check for writability system_tmpdir.
Origin: Siep Kroonenberg <siepo@bitmuis.nl>
Forwarded: No. Patch comes from upstream.
Author: Siep Kroonenberg <siepo@bitmuis.nl>
Last-Update: 20230214
--- texlive-base-2022.20230122.orig/texmf-dist/scripts/epspdf/epspdf.tlu
+++ texlive-base-2022.20230122/texmf-dist/scripts/epspdf/epspdf.tlu
@@ -13,8 +13,11 @@
some refactoring; better handling of some corner cases
0.6.5: eliminate .setpdfwrite from ghostscript commandlines,
since this is now considered obsolete
+0.6.5.1: eliminate faulty check for writability system_tmpdir;
+ just error out when no tempdir for epspdf can be created.
+ Avoid spawn for MiKTeX.
-Copyright (C) 2006-2020 Siep Kroonenberg
+Copyright (C) 2006-2023 Siep Kroonenberg
siepo at bitmuis nl
@@ -304,40 +307,8 @@
return false
end -- find_on_path
-function dir_writable(d)
- -- because directory attributes do not tell the whole story,
- -- we actually try to create a file in the directory.
- if not lfs.isdir(d) then
- return false
- end
- -- try to create a new file, write to it and delete it afterwards
- for i=1,1000 do
- local s = d .. '/' .. tostring(i)
- if not lfs.isfile(s) then
- local fh = io.open(s, "w")
- if fh then
- fh:write('test')
- fh:close()
- if lfs.isfile(s) then
- if lfs.attributes(s, 'size') > 0 then
- os.remove(s)
- return true
- else
- os.remove(s)
- return false -- open and write resulted in empty file
- end -- lfs.attributes
- else
- return false -- open and write did not result in a file
- end -- lfs.isfile
- end -- fh
- return false -- filename available; could not open for write
- end -- not lfs.isfile
- end -- for
- return false
-end
-
function system_tempdir ()
- local d
+ local d = false
if os.type=='windows' then
d = os.getenv('TEMP')
if not d then
@@ -350,9 +321,6 @@
end
end
-- cygwin: $TEMP=/tmp, root '/' being root of cygwin installation
- if d and not dir_writable(d) then
- d = false
- end
return d
end
@@ -403,6 +371,20 @@
return res
end -- tab_combine
+-- workaround for miktex spawn problem
+function spawnexec(cmd)
+ if is_miktex then
+ if type(cmd)=='table' then
+ return os.execute(table.concat(cmd, ' '))
+ -- there is no need for quoting in the cases used
+ else
+ return os.execute(cmd)
+ end
+ else
+ return os.spawn(cmd)
+ end
+end
+
-- files ----------------------------------------------------
-- Copy a file in chunks, with optional length and offset.
-- Since files may be very large, we copy them piecemeal.
@@ -1547,13 +1529,7 @@
-- if os.type=='unix' then
cmd = {luatex_prog, '--safer', '--no-shell-escape', textemp}
log_cmd(cmd)
- res = os.spawn(cmd)
- -- else
- -- cmd = luatex_prog..' --safer --no-shell-escape '..textemp
- -- log_cmd({cmd})
- -- -- os.execute('timeout /t 1 /nobreak >nul')
- -- res = os.execute(cmd)
- -- end
+ res = spawnexec(cmd)
if res and res==0 and lfs.attributes(pdftemp, 'size')>0 then
psp = PsPdf:from_path(pdftemp)
options.bbox = false
@@ -1583,7 +1559,7 @@
cmd = tab_combine({cmd, pdf_tail_options})
table.insert(cmd, self.path)
log_cmd(cmd)
- local res = os.spawn(cmd)
+ local res = spawnexec(cmd)
if res and res==0 and lfs.attributes(psp.path, 'size')>0 then
psp.pages, psp.miver, psp.maver = pdf_props(psp.path)
options.gray = false
@@ -1623,7 +1599,7 @@
cmd = tab_combine({cmd, pdf_tail_options})
table.insert(cmd, self.path)
log_cmd(cmd)
- local res = os.spawn(cmd)
+ local res = spawnexec(cmd)
if res and res==0 and lfs.attributes(psp.path, 'size')>0 then
psp.pages, psp.miver, psp.maver = pdf_props(psp.path)
options.gray = false
@@ -1655,10 +1631,9 @@
-- which are usually harmless and for which I know no easy fix
-- pdftops -q does not do the trick on Windows,
-- and redirection to logfile gives access denied under miktex
- -- res = os.spawn({'cmd', '/c', table.concat(cmd, ' ')..' 2>>'..log_bsl})
res = os.execute(table.concat(cmd, ' ')..' 2>nul')
else
- res = os.spawn(cmd)
+ res = spawnexec(cmd)
end
if res and res==0 and lfs.attributes(psp.path, 'size')>0 then
psp.pages = 1
@@ -1732,7 +1707,7 @@
table.insert(cmd, '-sOutputFile='..psp.path)
table.insert(cmd, self.path)
log_cmd(cmd)
- res = os.spawn(cmd)
+ res = spawnexec(cmd)
if res and res==0 and lfs.attributes(psp.path, 'size')>0 then
psp.pages = 1
options.page = false
@@ -1762,7 +1737,7 @@
cmd = tab_combine({cmd, pdf_tail_options})
table.insert(cmd, self.path)
log_cmd(cmd)
- local res = os.spawn(cmd)
+ local res = spawnexec(cmd)
if res and res==0 and lfs.attributes(psp.path, 'size')>0 then
psp.pages, psp.miver, psp.maver = pdf_props(psp.path)
options.gray = false
@@ -1805,10 +1780,9 @@
-- which are usually harmless and for which I know no easy fix
-- pdftops -q does not do the trick on Windows,
-- and redirection to logfile gives access denied under miktex
- -- res = os.spawn({'cmd', '/c', table.concat(cmd, ' ')..' 2>>'..log_bsl})
res = os.execute(table.concat(cmd, ' ')..' 2>nul')
else
- res = os.spawn(cmd)
+ res = spawnexec(cmd)
end
if res and res==0 and lfs.attributes(psp.path, 'size')>0 then
options.page = false
@@ -1833,7 +1807,7 @@
table.insert(cmd, '-sOutputFile#'..psp.path)
table.insert(cmd, self.path)
log_cmd(cmd)
- local res = os.spawn(cmd)
+ local res = spawnexec(cmd)
if res and res==0 and lfs.attributes(psp.path, 'size')>0 then
options.gray = false
return psp
@@ -1901,9 +1875,12 @@
if settings.pdf_target and (settings.pdf_target~='default') then
table.insert(pdf_options, '-dPDFSETTINGS#/'..settings.pdf_target)
end
- if settings.pdf_target~='screen' and settings.pdf_target~='ebook' then
- pdf_tail_options = {
- '-c', '<</NeverEmbed [ ] >> setdistillerparams', '-f'}
+ if not is_miktex then
+ -- options below cause trouble with unpacked cmd table
+ if settings.pdf_target~='screen' and settings.pdf_target~='ebook' then
+ pdf_tail_options = {
+ '-c', '<</NeverEmbed [ ] >> setdistillerparams', '-f'}
+ end
end
end
@@ -2063,7 +2040,7 @@
end
if (not need_gs) and options.page then
psp = psp:pdf_crop()
- -- less invasive that page selection by gs
+ -- less invasive than page selection by gs
end
if need_gs then
psp = psp:pdf_to_pdf() -- will handle page selection too
@@ -2395,7 +2372,7 @@
-- a couple of functions only available during command-line parsing
local function show_version ()
- print('Epspdf version 0.6.4\nCopyright (c) 2006-2019 Siep Kroonenberg')
+ print('Epspdf version 0.6.5.1\nCopyright (c) 2006-2023 Siep Kroonenberg')
end
local function help (mess) -- requires opts array
@@ -2649,10 +2626,16 @@
-- a directory under a dedicated temp directory, which has a better chance
-- of getting cleaned up by the system.
- lfs.chdir(system_tempdir() or out_dir)
- -- no check for failure; we create a subdirectory in
- -- whatever is the current directory
- tempdir = os.tmpdir()
+ for i, d in pairs({system_tempdir(), out_dir}) do
+ if not lfs.chdir(d) then
+ io.stdout:write('cannot cd into '..d..'\n')
+ goto continue
+ end
+ tempdir = os.tmpdir()
+ if not tempdir then goto continue end
+ break
+ ::continue::
+ end
if not tempdir then
errror('Cannot create directory for temporary files')
end
|