summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/lib
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2014-05-06 07:34:34 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2014-05-06 07:34:34 +0000
commit526582da8c8fabccfebea407a9da54822daa4f88 (patch)
tree6a43246601863a43f773d3ac3f3228223f52958a /Build/source/texk/web2c/lib
parentdab66ac6e4a0df1662c67937c13535fcbd1148b3 (diff)
pdfTeX, e-(u)pTeX: Slightly reorganize to avoid duplicat code
git-svn-id: svn://tug.org/texlive/trunk@33876 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/lib')
-rw-r--r--Build/source/texk/web2c/lib/ChangeLog6
-rw-r--r--Build/source/texk/web2c/lib/texmfmp.c55
2 files changed, 61 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/lib/ChangeLog b/Build/source/texk/web2c/lib/ChangeLog
index 26ff9fcb5d7..6b208404b3e 100644
--- a/Build/source/texk/web2c/lib/ChangeLog
+++ b/Build/source/texk/web2c/lib/ChangeLog
@@ -1,3 +1,9 @@
+2014-05-06 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ Update to e-pTeX and e-upTeX from Akira Kakuto.
+ * texmfmp.c (getfiledump): Move definition of this function
+ also used by e-(u)pTeX from ../pdftexdir/utils.c to here.
+
2014-01-20 Akira Kakuto <kakuto@fuk.kinidai.ac.jp>
* printversion.c: 2013 ---> 2014.
diff --git a/Build/source/texk/web2c/lib/texmfmp.c b/Build/source/texk/web2c/lib/texmfmp.c
index e45e8446d01..d6cdb401136 100644
--- a/Build/source/texk/web2c/lib/texmfmp.c
+++ b/Build/source/texk/web2c/lib/texmfmp.c
@@ -2990,6 +2990,61 @@ void getfilesize(integer s)
xfree(file_name);
}
+
+void getfiledump(integer s, int offset, int length)
+{
+ FILE *f;
+ int read, i;
+ poolpointer data_ptr;
+ poolpointer data_end;
+ char *file_name;
+
+ if (length == 0) {
+ /* empty result string */
+ return;
+ }
+
+ if (poolptr + 2 * length + 1 >= poolsize) {
+ /* no place for result */
+ poolptr = poolsize;
+ /* error by str_toks that calls str_room(1) */
+ return;
+ }
+
+ file_name = kpse_find_tex(makecfilename(s));
+ if (file_name == NULL) {
+ return; /* empty string */
+ }
+
+ /* read file data */
+ f = fopen(file_name, FOPEN_RBIN_MODE);
+ if (f == NULL) {
+ xfree(file_name);
+ return;
+ }
+ recorder_record_input(file_name);
+ if (fseek(f, offset, SEEK_SET) != 0) {
+ xfree(file_name);
+ return;
+ }
+ /* there is enough space in the string pool, the read
+ data are put in the upper half of the result, thus
+ the conversion to hex can be done without overwriting
+ unconverted bytes. */
+ data_ptr = poolptr + length;
+ read = fread(&strpool[data_ptr], sizeof(char), length, f);
+ fclose(f);
+
+ /* convert to hex */
+ data_end = data_ptr + read;
+ for (; data_ptr < data_end; data_ptr++) {
+ i = snprintf((char *) &strpool[poolptr], 3,
+ "%.2X", (unsigned int) strpool[data_ptr]);
+ check_nprintf(i, 3);
+ poolptr += i;
+ }
+ xfree(file_name);
+}
#endif /* e-pTeX or e-upTeX */
#endif /* TeX */