[gs-cvs] rev 8643 - branches/mtrender/src
ray at ghostscript.com
ray at ghostscript.com
Tue Apr 15 11:08:50 PDT 2008
Author: ray
Date: 2008-04-15 11:08:49 -0700 (Tue, 15 Apr 2008)
New Revision: 8643
Added:
branches/mtrender/src/gsromfs0.c
branches/mtrender/src/sfxcommon.c
Log:
More missing files in this branch.
Added: branches/mtrender/src/gsromfs0.c
===================================================================
--- branches/mtrender/src/gsromfs0.c 2008-04-15 18:04:18 UTC (rev 8642)
+++ branches/mtrender/src/gsromfs0.c 2008-04-15 18:08:49 UTC (rev 8643)
@@ -0,0 +1,20 @@
+/* Copyright (C) 2001-2006 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied, modified
+ or distributed except as expressly authorized under the terms of that
+ license. Refer to licensing information at http://www.artifex.com/
+ or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
+ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.
+*/
+
+/* $Id: gsromfs0.c 8577 2008-03-03 02:57:05Z ray $ */
+/* dummy gsromfs source module used when COMPILE_INITS=0 */
+
+#include "stdint_.h"
+
+ uint32_t *gs_romfs[] = {
+ 0 };
Added: branches/mtrender/src/sfxcommon.c
===================================================================
--- branches/mtrender/src/sfxcommon.c 2008-04-15 18:04:18 UTC (rev 8642)
+++ branches/mtrender/src/sfxcommon.c 2008-04-15 18:08:49 UTC (rev 8643)
@@ -0,0 +1,186 @@
+/* Copyright (C) 2008 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied, modified
+ or distributed except as expressly authorized under the terms of that
+ license. Refer to licensing information at http://www.artifex.com/
+ or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
+ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.
+*/
+
+/* $Id: sfxcommon.c 8250 2007-09-25 13:31:24Z giles $ */
+/* Common routines for stdio and fd file stream implementations. */
+#include "stdio_.h" /* includes std.h */
+#include "memory_.h"
+#include "unistd_.h"
+#include "gsmemory.h"
+#include "gp.h"
+#include "gserror.h"
+#include "gserrors.h"
+#include "stream.h"
+
+#define DEFAULT_BUFFER_SIZE 2048
+const uint file_default_buffer_size = DEFAULT_BUFFER_SIZE;
+
+/* Allocate and return a file stream. */
+/* Return 0 if the allocation failed. */
+/* The stream is initialized to an invalid state, so the caller need not */
+/* worry about cleaning up if a later step in opening the stream fails. */
+stream *
+file_alloc_stream(gs_memory_t * mem, client_name_t cname)
+{
+ stream *s;
+ s = s_alloc(mem, cname);
+ if (s == 0)
+ return 0;
+ s_init_ids(s);
+ s->is_temp = 0; /* not a temp stream */
+ s->foreign = 0;
+ /*
+ * Disable the stream now (in case we can't open the file,
+ * or a filter init procedure fails) so that `restore' won't
+ * crash when it tries to close open files.
+ */
+ s_disable(s);
+ s->prev = 0;
+ s->next = 0;
+ return s;
+}
+
+/* Open a file stream, optionally on an OS file. */
+/* Return 0 if successful, error code if not. */
+/* On a successful return, the C file name is in the stream buffer. */
+/* If fname==0, set up the file entry, stream, and buffer, */
+/* but don't open an OS file or initialize the stream. */
+int
+file_open_stream(const char *fname, uint len, const char *file_access,
+ uint buffer_size, stream ** ps, gx_io_device *iodev,
+ iodev_proc_fopen_t fopen_proc, gs_memory_t *mem)
+{
+ int code;
+ FILE *file;
+ char fmode[4]; /* r/w/a, [+], [b], null */
+
+ if (!iodev)
+ iodev = iodev_default;
+ code = file_prepare_stream(fname, len, file_access, buffer_size, ps, fmode, mem);
+ if (code < 0)
+ return code;
+ if (fname == 0)
+ return 0;
+ if (fname[0] == 0) /* fopen_proc gets NUL terminated string, not len */
+ return 0; /* so this is the same as len == 0, so return NULL */
+ code = (*fopen_proc)(iodev, (char *)(*ps)->cbuf, fmode, &file,
+ (char *)(*ps)->cbuf, (*ps)->bsize);
+ if (code < 0)
+ return code;
+ file_init_stream(*ps, file, fmode, (*ps)->cbuf, (*ps)->bsize);
+ return 0;
+}
+
+/* Close a file stream. This replaces the close procedure in the stream */
+/* for normal (OS) files and for filters. */
+int
+file_close_file(stream * s)
+{
+ stream *stemp = s->strm;
+ gs_memory_t *mem;
+ int code = file_close_disable(s);
+
+ if (code)
+ return code;
+ /*
+ * Check for temporary streams created for filters.
+ * There may be more than one in the case of a procedure-based filter,
+ * or if we created an intermediate stream to ensure
+ * a large enough buffer. Note that these streams may have been
+ * allocated by file_alloc_stream, so we mustn't free them.
+ */
+ while (stemp != 0 && stemp->is_temp != 0) {
+ stream *snext = stemp->strm;
+
+ mem = stemp->memory;
+ if (stemp->is_temp > 1)
+ gs_free_object(mem, stemp->cbuf,
+ "file_close(temp stream buffer)");
+ s_disable(stemp);
+ stemp = snext;
+ }
+ mem = s->memory;
+ gs_free_object(mem, s->cbuf, "file_close(buffer)");
+ if (s->close_strm && stemp != 0)
+ return sclose(stemp);
+ return 0;
+}
+
+/*
+ * Set up a file stream on an OS file. The caller has allocated the
+ * stream and buffer.
+ */
+void
+file_init_stream(stream *s, FILE *file, const char *fmode, byte *buffer,
+ uint buffer_size)
+{
+ switch (fmode[0]) {
+ case 'a':
+ sappend_file(s, file, buffer, buffer_size);
+ break;
+ case 'r':
+ /* Defeat buffering for terminals. */
+ {
+ struct stat rstat;
+
+ fstat(fileno(file), &rstat);
+ sread_file(s, file, buffer,
+ (S_ISCHR(rstat.st_mode) ? 1 : buffer_size));
+ }
+ break;
+ case 'w':
+ swrite_file(s, file, buffer, buffer_size);
+ }
+ if (fmode[1] == '+')
+ s->file_modes |= s_mode_read | s_mode_write;
+ s->save_close = s->procs.close;
+ s->procs.close = file_close_file;
+}
+
+/* Prepare a stream with a file name. */
+/* Return 0 if successful, error code if not. */
+/* On a successful return, the C file name is in the stream buffer. */
+/* If fname==0, set up stream, and buffer. */
+int
+file_prepare_stream(const char *fname, uint len, const char *file_access,
+ uint buffer_size, stream ** ps, char fmode[4], gs_memory_t *mem)
+{
+ byte *buffer;
+ register stream *s;
+
+ /* Open the file, always in binary mode. */
+ strcpy(fmode, file_access);
+ strcat(fmode, gp_fmode_binary_suffix);
+ if (buffer_size == 0)
+ buffer_size = file_default_buffer_size;
+ if (len >= buffer_size) /* we copy the file name into the buffer */
+ return_error(gs_error_limitcheck);
+ /* Allocate the stream first, since it persists */
+ /* even after the file has been closed. */
+ s = file_alloc_stream(mem, "file_prepare_stream");
+ if (s == 0)
+ return_error(gs_error_VMerror);
+ /* Allocate the buffer. */
+ buffer = gs_alloc_bytes(mem, buffer_size, "file_prepare_stream(buffer)");
+ if (buffer == 0)
+ return_error(gs_error_VMerror);
+ if (fname != 0) {
+ memcpy(buffer, fname, len);
+ buffer[len] = 0; /* terminate string */
+ } else
+ buffer[0] = 0; /* safety */
+ s->cbuf = buffer;
+ s->bsize = s->cbsize = buffer_size;
+ *ps = s;
+ return 0;
+}
Property changes on: branches/mtrender/src/sfxcommon.c
___________________________________________________________________
Name: svn:executable
+ *
More information about the gs-cvs
mailing list