23#ifndef MUPDF_FITZ_SYSTEM_H
24#define MUPDF_FITZ_SYSTEM_H
28#ifndef PACIFY_VALGRIND
29#define PACIFY_VALGRIND
44#define FZ_FLEXIBLE_ARRAY 1
46#define FZ_FLEXIBLE_ARRAY
51#if defined(_MSC_VER) && (_MSC_VER < 1700)
52typedef signed char int8_t;
53typedef short int int16_t;
55typedef __int64 int64_t;
56typedef unsigned char uint8_t;
57typedef unsigned short int uint16_t;
58typedef unsigned int uint32_t;
59typedef unsigned __int64 uint64_t;
61#define INT64_MAX 9223372036854775807i64
69#if __has_include(<stdckdint.h>)
70#define HAVE_STDCKDINT_H 1
77#define nelem(x) (sizeof(x)/sizeof((x)[0]))
83#define FZ_PI 3.14159265f
84#define FZ_RADIAN 57.2957795f
85#define FZ_DEGREE 0.017453292f
86#define FZ_SQRT2 1.41421356f
87#define FZ_LN2 0.69314718f
94#if defined(__arm__) || defined(__thumb__)
102#if defined(__ARM_NEON) || defined(__ARM_NEON__)
103#define ARCH_HAS_NEON 1
108#define ARCH_HAS_NEON 0
114#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64)
115#define ARCH_HAS_SSE 1
120#define ARCH_HAS_SSE 0
128#ifndef __STRICT_ANSI__
129#if defined(__APPLE__)
130#ifndef HAVE_SIGSETJMP
131#define HAVE_SIGSETJMP 1
134#ifndef __EMSCRIPTEN__
135#ifndef HAVE_SIGSETJMP
136#define HAVE_SIGSETJMP 1
141#ifndef HAVE_SIGSETJMP
142#define HAVE_SIGSETJMP 0
154#define fz_setjmp(BUF) sigsetjmp(BUF, 0)
155#define fz_longjmp(BUF,VAL) siglongjmp(BUF, VAL)
158#define fz_setjmp(BUF) setjmp(BUF)
159#define fz_longjmp(BUF,VAL) longjmp(BUF,VAL)
181static __inline
int signbit(
double x)
189 return (
int)(u.i>>63);
193#pragma warning( disable: 4244 )
194#pragma warning( disable: 4701 )
195#pragma warning( disable: 4996 )
198#define isnan(x) _isnan(x)
199#define isinf(x) (!_finite(x))
203#define hypotf _hypotf
212void *fz_fopen_utf8(
const char *name,
const char *mode);
213int fz_remove_utf8(
const char *name);
215char **fz_argv_from_wargv(
int argc,
wchar_t **wargv);
216void fz_free_argv(
int argc,
char **argv);
222#define S_ISDIR(mode) ((mode) & S_IFDIR)
236#if defined (__STDC_VERSION_) && (__STDC_VERSION__ >= 199901L)
237#elif defined(_MSC_VER) && (_MSC_VER >= 1500)
238#define inline __inline
239#define fz_forceinline __forceinline
240#elif defined(__GNUC__) && (__GNUC__ >= 3)
241#define inline __inline
247#ifndef fz_forceinline
248#define fz_forceinline inline
252#if defined (__STDC_VERSION_) && (__STDC_VERSION__ >= 199901L)
253#define FZ_RESTRICT restrict
254#elif defined(_MSC_VER) && (_MSC_VER >= 1600)
255#define FZ_RESTRICT __restrict
256#elif defined(__GNUC__) && (__GNUC__ >= 3)
257#define FZ_RESTRICT __restrict
264#define FZ_NORETURN __attribute__((noreturn))
267#define FZ_NORETURN __declspec(noreturn)
275#if defined(__GNUC__) && (__GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ >= 7)
276#define FZ_UNUSED __attribute__((__unused__))
283#define FZ_PRINTFLIKE(F,V) __printflike(F,V)
285#if defined(__GNUC__) && (__GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ >= 7)
286#define FZ_PRINTFLIKE(F,V) __attribute__((__format__ (__printf__, F, V)))
288#define FZ_PRINTFLIKE(F,V)
304#if defined(__thumb__) || defined(__thumb2__)
305#define ENTER_ARM ".balign 4\nmov r12,pc\nbx r12\n0:.arm\n"
306#define ENTER_THUMB "9:.thumb\n"
330#ifndef FZ_MEMORY_BLOCK_ALIGN_MOD
331#if defined(sparc) || defined(__sparc) || defined(__sparc__)
332#define FZ_MEMORY_BLOCK_ALIGN_MOD 8
334#define FZ_MEMORY_BLOCK_ALIGN_MOD sizeof(void *)
342#ifndef FZ_POINTER_ALIGN_MOD
343#if defined(__amd64) || defined(__amd64__) || defined(__x86_64) || defined(__x86_64__)
344#define FZ_POINTER_ALIGN_MOD 4
346#define FZ_POINTER_ALIGN_MOD FZ_MEMORY_BLOCK_ALIGN_MOD
358#if defined(__SANITIZE_ADDRESS__) || defined(__SANITIZE_UNDEFINED__)
359#undef FZ_POINTER_ALIGN_MOD
360#define FZ_POINTER_ALIGN_MOD FZ_MEMORY_BLOCK_ALIGN_MOD
3730.0000000000f, 0.00390623013f,0.00781234106f,0.0117182136f,
3740.0156237286f, 0.0195287670f, 0.0234332099f, 0.0273369383f,
3750.0312398334f, 0.0351417768f, 0.0390426500f, 0.0429423347f,
3760.0468407129f, 0.0507376669f, 0.0546330792f, 0.0585268326f,
3770.0624188100f, 0.0663088949f, 0.0701969711f, 0.0740829225f,
3780.0779666338f, 0.0818479898f, 0.0857268758f, 0.0896031775f,
3790.0934767812f, 0.0973475735f, 0.1012154420f, 0.1050802730f,
3800.1089419570f, 0.1128003810f, 0.1166554350f, 0.1205070100f,
3810.1243549950f, 0.1281992810f, 0.1320397620f, 0.1358763280f,
3820.1397088740f, 0.1435372940f, 0.1473614810f, 0.1511813320f,
3830.1549967420f, 0.1588076080f, 0.1626138290f, 0.1664153010f,
3840.1702119250f, 0.1740036010f, 0.1777902290f, 0.1815717110f,
3850.1853479500f, 0.1891188490f, 0.1928843120f, 0.1966442450f,
3860.2003985540f, 0.2041471450f, 0.2078899270f, 0.2116268090f,
3870.2153577000f, 0.2190825110f, 0.2228011540f, 0.2265135410f,
3880.2302195870f, 0.2339192060f, 0.2376123140f, 0.2412988270f,
3890.2449786630f, 0.2486517410f, 0.2523179810f, 0.2559773030f,
3900.2596296290f, 0.2632748830f, 0.2669129880f, 0.2705438680f,
3910.2741674510f, 0.2777836630f, 0.2813924330f, 0.2849936890f,
3920.2885873620f, 0.2921733830f, 0.2957516860f, 0.2993222020f,
3930.3028848680f, 0.3064396190f, 0.3099863910f, 0.3135251230f,
3940.3170557530f, 0.3205782220f, 0.3240924700f, 0.3275984410f,
3950.3310960770f, 0.3345853220f, 0.3380661230f, 0.3415384250f,
3960.3450021770f, 0.3484573270f, 0.3519038250f, 0.3553416220f,
3970.3587706700f, 0.3621909220f, 0.3656023320f, 0.3690048540f,
3980.3723984470f, 0.3757830650f, 0.3791586690f, 0.3825252170f,
3990.3858826690f, 0.3892309880f, 0.3925701350f, 0.3959000740f,
4000.3992207700f, 0.4025321870f, 0.4058342930f, 0.4091270550f,
4010.4124104420f, 0.4156844220f, 0.4189489670f, 0.4222040480f,
4020.4254496370f, 0.4286857080f, 0.4319122350f, 0.4351291940f,
4030.4383365600f, 0.4415343100f, 0.4447224240f, 0.4479008790f,
4040.4510696560f, 0.4542287350f, 0.4573780990f, 0.4605177290f,
4050.4636476090f, 0.4667677240f, 0.4698780580f, 0.4729785980f,
4060.4760693300f, 0.4791502430f, 0.4822213240f, 0.4852825630f,
4070.4883339510f, 0.4913754780f, 0.4944071350f, 0.4974289160f,
4080.5004408130f, 0.5034428210f, 0.5064349340f, 0.5094171490f,
4090.5123894600f, 0.5153518660f, 0.5183043630f, 0.5212469510f,
4100.5241796290f, 0.5271023950f, 0.5300152510f, 0.5329181980f,
4110.5358112380f, 0.5386943730f, 0.5415676050f, 0.5444309400f,
4120.5472843810f, 0.5501279330f, 0.5529616020f, 0.5557853940f,
4130.5585993150f, 0.5614033740f, 0.5641975770f, 0.5669819340f,
4140.5697564530f, 0.5725211450f, 0.5752760180f, 0.5780210840f,
4150.5807563530f, 0.5834818390f, 0.5861975510f, 0.5889035040f,
4160.5915997100f, 0.5942861830f, 0.5969629370f, 0.5996299860f,
4170.6022873460f, 0.6049350310f, 0.6075730580f, 0.6102014430f,
4180.6128202020f, 0.6154293530f, 0.6180289120f, 0.6206188990f,
4190.6231993300f, 0.6257702250f, 0.6283316020f, 0.6308834820f,
4200.6334258830f, 0.6359588250f, 0.6384823300f, 0.6409964180f,
4210.6435011090f, 0.6459964250f, 0.6484823880f, 0.6509590190f,
4220.6534263410f, 0.6558843770f, 0.6583331480f, 0.6607726790f,
4230.6632029930f, 0.6656241120f, 0.6680360620f, 0.6704388650f,
4240.6728325470f, 0.6752171330f, 0.6775926450f, 0.6799591110f,
4250.6823165550f, 0.6846650020f, 0.6870044780f, 0.6893350100f,
4260.6916566220f, 0.6939693410f, 0.6962731940f, 0.6985682070f,
4270.7008544080f, 0.7031318220f, 0.7054004770f, 0.7076604000f,
4280.7099116190f, 0.7121541600f, 0.7143880520f, 0.7166133230f,
4290.7188300000f, 0.7210381110f, 0.7232376840f, 0.7254287490f,
4300.7276113330f, 0.7297854640f, 0.7319511710f, 0.7341084830f,
4310.7362574290f, 0.7383980370f, 0.7405303370f, 0.7426543560f,
4320.7447701260f, 0.7468776740f, 0.7489770290f, 0.7510682220f,
4330.7531512810f, 0.7552262360f, 0.7572931160f, 0.7593519510f,
4340.7614027700f, 0.7634456020f, 0.7654804790f, 0.7675074280f,
4350.7695264800f, 0.7715376650f, 0.7735410110f, 0.7755365500f,
4360.7775243100f, 0.7795043220f, 0.7814766150f, 0.7834412190f,
4370.7853981630f, 0.7853981630f
440static inline float my_sinf(
float x)
449 i = x / (2.0f *
FZ_PI);
450 x -= i * 2.0f *
FZ_PI;
454 if (x <= -
FZ_PI / 2.0f)
456 else if (x >=
FZ_PI / 2.0f)
474static inline float my_atan2f(
float o,
float a)
476 int negate = 0, flip = 0, i;
490 i = 65536.0f * o / a + 0.5f;
492 i = 65536.0f * a / o + 0.5f;
493 r = my_atan_table[i >> 8];
494 s = my_atan_table[(i >> 8) + 1];
495 r += (s - r) * (i & 255) / 256.0f;
497 r =
FZ_PI / 2.0f - r;
505#define sinf(x) my_sinf(x)
506#define cosf(x) my_sinf(FZ_PI / 2.0f + (x))
507#define atan2f(x,y) my_atan2f((x),(y))
510static inline int fz_is_pow2(
int a)
512 return (a != 0) && (a & (a-1)) == 0;
int64_t fz_stat_mtime(const char *path)
int64_t fz_stat_ctime(const char *path)
jmp_buf fz_jmp_buf
Definition system.h:160
#define FZ_PI
Definition system.h:83