fz_stream *fz_open_file_ptr_no_close(fz_context *ctx, FILE *file) { fz_stream *stm = fz_open_file_ptr(ctx, file); /* We don't own the file ptr. Ensure we don't close it */ stm->drop = fz_free; return stm; }
/* Open the named file and wrap it in a stream. This function is only available when compiling for Win32. filename: Wide character path to the file as it would be given to _wfopen(). */ fz_stream * fz_open_file_w(fz_context *ctx, const wchar_t *name) { FILE *file = _wfopen(name, L"rb"); if (file == NULL) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot open file %ls: %s", name, strerror(errno)); return fz_open_file_ptr(ctx, file); }
/* Open the named file and wrap it in a stream. filename: Path to a file. On non-Windows machines the filename should be exactly as it would be passed to fopen(2). On Windows machines, the path should be UTF-8 encoded so that non-ASCII characters can be represented. Other platforms do the encoding as standard anyway (and in most cases, particularly for MacOS and Linux, the encoding they use is UTF-8 anyway). */ fz_stream * fz_open_file(fz_context *ctx, const char *name) { FILE *file; #ifdef _WIN32 file = fz_fopen_utf8(name, "rb"); #else file = fopen(name, "rb"); #endif if (file == NULL) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot open %s: %s", name, strerror(errno)); return fz_open_file_ptr(ctx, file); }
fz_stream * fz_open_file(fz_context *ctx, const char *name) { FILE *f; #if defined(_WIN32) || defined(_WIN64) char *s = (char*)name; wchar_t *wname, *d; int c; d = wname = fz_malloc(ctx, (strlen(name)+1) * sizeof(wchar_t)); while (*s) { s += fz_chartorune(&c, s); *d++ = c; } *d = 0; f = _wfopen(wname, L"rb"); fz_free(ctx, wname); #else f = fz_fopen(name, "rb"); #endif if (f == NULL) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot open %s: %s", name, strerror(errno)); return fz_open_file_ptr(ctx, f); }