fz_stream * fz_open_file_progressive(fz_context *ctx, const char *name, int bps) { FILE *f; #if defined(_WIN32) || defined(_WIN64) f = fz_fopen_utf8(name, "rb"); #else f = fopen(name, "rb"); #endif if (f == NULL) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot open %s", name); return fz_open_file_ptr_progressive(ctx, f, bps); }
/* 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); }
/* Return true if the named file exists and is readable. */ int fz_file_exists(fz_context *ctx, const char *path) { FILE *file; #ifdef _WIN32 file = fz_fopen_utf8(path, "rb"); #else file = fopen(path, "rb"); #endif if (file) fclose(file); return !!file; }
/* Open an output stream that writes to a given path. filename: The filename to write to (specified in UTF-8). append: non-zero if we should append to the file, rather than overwriting it. */ fz_output * fz_new_output_with_path(fz_context *ctx, const char *filename, int append) { FILE *file; fz_output *out; if (!strcmp(filename, "/dev/null") || !fz_strcasecmp(filename, "nul:")) return fz_new_output(ctx, 0, NULL, null_write, NULL, NULL); #ifdef _WIN32 /* Ensure we create a brand new file. We don't want to clobber our old file. */ if (!append) { if (fz_remove_utf8(filename) < 0) if (errno != ENOENT) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot remove file '%s': %s", filename, strerror(errno)); } file = fz_fopen_utf8(filename, append ? "rb+" : "wb+"); #else /* Ensure we create a brand new file. We don't want to clobber our old file. */ if (!append) { if (remove(filename) < 0) if (errno != ENOENT) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot remove file '%s': %s", filename, strerror(errno)); } file = fopen(filename, append ? "rb+" : "wb+"); #endif if (!file) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot open file '%s': %s", filename, strerror(errno)); setvbuf(file, NULL, _IONBF, 0); /* we do our own buffering */ out = fz_new_output(ctx, 8192, file, file_write, NULL, file_drop); out->seek = file_seek; out->tell = file_tell; out->as_stream = file_as_stream; return out; }