~ubuntu-branches/ubuntu/jaunty/ghostscript/jaunty-updates

« back to all changes in this revision

Viewing changes to base/stdpre.h

  • Committer: Bazaar Package Importer
  • Author(s): Till Kamppeter
  • Date: 2009-01-20 16:40:45 UTC
  • mfrom: (1.1.10 upstream)
  • Revision ID: james.westby@ubuntu.com-20090120164045-lnfhi0n30o5lwhwa
Tags: 8.64.dfsg.1~svn9377-0ubuntu1
* New upstream release (SVN rev 9377)
   o Fixes many bugs concerning PDF rendering, to make the PDF printing
     workflow correctly working.
   o Fixes long-standing bugs in many drivers, like input paper tray and
     duplex options not working for the built-in PCL 4, 5, 5c, 5e, and
     6/XL drivers, PDF input not working for bjc600, bjc800, and cups
     output devices, several options not working and uninitialized
     memory with cups output device.
   o Merged nearly all patches of the Ubuntu and Debian packages upstream.
   o Fixes LP: #317810, LP: #314439, LP: #314018.
* debian/patches/03_libpaper_support.dpatch,
  debian/patches/11_gs-cjk_font_glyph_handling_fix.dpatch,
  debian/patches/12_gs-cjk_vertical_writing_metrics_fix.dpatch,
  debian/patches/13_gs-cjk_cjkps_examples.dpatch,
  debian/patches/20_bbox_segv_fix.dpatch,
  debian/patches/21_brother_7x0_gdi_fix.dpatch,
  debian/patches/22_epsn_margin_workaround.dpatch,
  debian/patches/24_gs_man_fix.dpatch,
  debian/patches/25_toolbin_insecure_tmp_usage_fix.dpatch,
  debian/patches/26_assorted_script_fixes.dpatch,
  debian/patches/29_gs_css_fix.dpatch,
  debian/patches/30_ps2pdf_man_improvement.dpatch,
  debian/patches/31_fix-gc-sigbus.dpatch,
  debian/patches/34_ftbfs-on-hurd-fix.dpatch,
  debian/patches/35_disable_libcairo.dpatch,
  debian/patches/38_pxl-duplex.dpatch,
  debian/patches/39_pxl-resolution.dpatch,
  debian/patches/42_gs-init-ps-delaybind-fix.dpatch,
  debian/patches/45_bjc600-bjc800-pdf-input.dpatch,
  debian/patches/48_cups-output-device-pdf-duplex-uninitialized-memory-fix.dpatch,
  debian/patches/50_lips4-floating-point-exception.dpatch,
  debian/patches/52_cups-device-logging.dpatch,
  debian/patches/55_pcl-input-slot-fix.dpatch,
  debian/patches/57_pxl-input-slot-fix.dpatch,
  debian/patches/60_pxl-cups-driver-pdf.dpatch,
  debian/patches/62_onebitcmyk-pdf.dpatch,
  debian/patches/65_too-big-temp-files-1.dpatch,
  debian/patches/67_too-big-temp-files-2.dpatch,
  debian/patches/70_take-into-account-data-in-stream-buffer-before-refill.dpatch:
  Removed, applied upstream.
* debian/patches/01_docdir_fix_for_debian.dpatch,
  debian/patches/02_gs_man_fix_debian.dpatch,
  debian/patches/01_docdir-fix-for-debian.dpatch,
  debian/patches/02_docdir-fix-for-debian.dpatch: Renamed patches to
  make merging with Debian easier.
* debian/patches/32_improve-handling-of-media-size-changes-from-gv.dpatch, 
  debian/patches/33_bad-params-to-xinitimage-on-large-bitmaps.dpatch:
  regenerated for new source directory structure.
* debian/rules: Corrected paths to remove cidfmap (it is in Resource/Init/
  in GS 8.64) and to install headers (source paths are psi/ and base/ now).
* debian/rules: Remove all fontmaps, as DeFoMa replaces them.
* debian/local/pdftoraster/pdftoraster.c,
  debian/local/pdftoraster/pdftoraster.convs, debian/rules: Removed
  added pdftoraster filter and use the one which comes with Ghostscript.
* debian/ghostscript.links: s/8.63/8.64/

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright (C) 2001-2007 Artifex Software, Inc.
 
2
   All Rights Reserved.
 
3
  
 
4
   This software is provided AS-IS with no warranty, either express or
 
5
   implied.
 
6
 
 
7
   This software is distributed under license and may not be copied, modified
 
8
   or distributed except as expressly authorized under the terms of that
 
9
   license.  Refer to licensing information at http://www.artifex.com/
 
10
   or contact Artifex Software, Inc.,  7 Mt. Lassen Drive - Suite A-134,
 
11
   San Rafael, CA  94903, U.S.A., +1(415)492-9861, for further information.
 
12
*/
 
13
 
 
14
/* $Id: stdpre.h 8250 2007-09-25 13:31:24Z giles $ */
 
15
/* Standard definitions for Ghostscript code not needing arch.h */
 
16
 
 
17
#ifndef stdpre_INCLUDED
 
18
#  define stdpre_INCLUDED
 
19
 
 
20
/* Ghostscript uses transitional LFS functions. */
 
21
#define _LARGEFILE64_SOURCE 1
 
22
 
 
23
/*
 
24
 * Here we deal with the vagaries of various C compilers.  We assume that:
 
25
 *      ANSI-standard Unix compilers define __STDC__.
 
26
 *      gcc defines __GNUC__.
 
27
 *      Borland Turbo C and Turbo C++ define __MSDOS__ and __TURBOC__.
 
28
 *      Borland C++ defines __BORLANDC__, __MSDOS__, and __TURBOC__.
 
29
 *      Microsoft C/C++ defines _MSC_VER and _MSDOS.
 
30
 *      Watcom C defines __WATCOMC__ and MSDOS.
 
31
 *      MetroWerks C defines __MWERKS__.
 
32
 *
 
33
 * We arrange to define __MSDOS__ on all the MS-DOS platforms.
 
34
 */
 
35
#if (defined(MSDOS) || defined(_MSDOS)) && !defined(__MSDOS__)
 
36
#  define __MSDOS__
 
37
#endif
 
38
/*
 
39
 * Also, not used much here, but used in other header files, we assume:
 
40
 *      Unix System V environments define SYSV.
 
41
 *      The SCO ODT compiler defines M_SYSV and M_SYS3.
 
42
 *      VMS systems define VMS.
 
43
 *      OSF/1 compilers define __osf__ or __OSF__.
 
44
 *        (The VMS and OSF/1 C compilers handle prototypes and const,
 
45
 *        but do not define __STDC__.)
 
46
 *      bsd 4.2 or 4.3 systems define BSD4_2.
 
47
 *      POSIX-compliant environments define _POSIX_SOURCE.
 
48
 *      Motorola 88K BCS/OCS systems defined m88k.
 
49
 *
 
50
 * We make fairly heroic efforts to confine all uses of these flags to
 
51
 * header files, and never to use them in code.
 
52
 */
 
53
#if defined(__osf__) && !defined(__OSF__)
 
54
#  define __OSF__               /* */
 
55
#endif
 
56
#if defined(M_SYSV) && !defined(SYSV)
 
57
#  define SYSV                  /* */
 
58
#endif
 
59
#if defined(M_SYS3) && !defined(__SVR3)
 
60
#  define __SVR3                /* */
 
61
#endif
 
62
 
 
63
#if defined(__STDC__) || defined(__MSDOS__) || defined(__convex__) || defined(VMS) || defined(__OSF__) || defined(__WIN32__) || defined(__IBMC__) || defined(M_UNIX) || defined(__GNUC__) || defined(__BORLANDC__)
 
64
# if !(defined(M_XENIX) && !defined(__GNUC__))  /* SCO Xenix cc is broken */
 
65
#  define __PROTOTYPES__        /* */
 
66
# endif
 
67
#endif
 
68
 
 
69
/* Define dummy values for __FILE__ and __LINE__ if the compiler */
 
70
/* doesn't provide these.  Note that places that use __FILE__ */
 
71
/* must check explicitly for a null pointer. */
 
72
#ifndef __FILE__
 
73
#  define __FILE__ NULL
 
74
#endif
 
75
#ifndef __LINE__
 
76
#  define __LINE__ 0
 
77
#endif
 
78
 
 
79
/* Disable 'const' and 'volatile' if the compiler can't handle them. */
 
80
#ifndef __PROTOTYPES__
 
81
#  undef const
 
82
#  define const                 /* */
 
83
#  undef volatile
 
84
#  define volatile              /* */
 
85
#endif
 
86
 
 
87
/* Disable 'inline' if the compiler can't handle it. */
 
88
#ifdef __DECC
 
89
#  undef inline
 
90
#  define inline __inline
 
91
#else
 
92
#  ifdef __GNUC__
 
93
/* Define inline as __inline__ so -pedantic won't produce a warning. */
 
94
#    undef inline
 
95
#    define inline __inline__
 
96
#  else
 
97
#    if !(defined(__MWERKS__) || defined(inline))
 
98
#      define inline            /* */
 
99
#    endif
 
100
#  endif
 
101
#endif
 
102
 
 
103
/*
 
104
 * Provide a way to include inline procedures in header files, regardless of
 
105
 * whether the compiler (A) doesn't support inline at all, (B) supports it
 
106
 * but also always compiles a closed copy, (C) supports it but somehow only
 
107
 * includes a single closed copy in the executable, or (D) supports it and
 
108
 * also supports a different syntax if no closed copy is desired.
 
109
 *
 
110
 * The code that appears just after this comment indicates which compilers
 
111
 * are of which kind.  (Eventually this might be determined automatically.)
 
112
 *      (A) and (B) require nothing here.
 
113
 *      (C) requires
 
114
 *              #define extern_inline inline
 
115
 *      (D) requires
 
116
 *              #define extern_inline extern inline  // or whatever
 
117
 * Note that for case (B), the procedure will only be declared inline in
 
118
 * the .c file where its closed copy is compiled.
 
119
 */
 
120
#ifdef __GNUC__
 
121
#  define extern_inline extern inline
 
122
#endif
 
123
 
 
124
/*
 
125
 * To include an inline procedure xyz in a header file abc.h, use the
 
126
 * following template in the header file:
 
127
 
 
128
extern_inline int xyz(<<parameters>>)
 
129
#if HAVE_EXTERN_INLINE || defined(INLINE_INCLUDE_xyz)
 
130
{
 
131
    <<body>>
 
132
}
 
133
#else
 
134
;
 
135
#endif
 
136
 
 
137
 * And use the following in whichever .c file takes responsibility for
 
138
 * including the closed copy of xyz:
 
139
 
 
140
#define EXTERN_INCLUDE_xyz      // must precede all #includes
 
141
#include "abc.h"
 
142
 
 
143
 * The definitions of the EXTERN_INCLUDE_ macros must precede *all* includes
 
144
 * because there is no way to know whether some other .h file #includes abc.h
 
145
 * indirectly, and because of the protection against double #includes, the
 
146
 * EXTERN_INCLUDE_s must be defined before the first inclusion of abc.h.
 
147
 */
 
148
 
 
149
/*
 
150
 * The following is generic code that does not need per-compiler
 
151
 * customization.
 
152
 */
 
153
#ifdef extern_inline
 
154
#  define HAVE_EXTERN_INLINE 1
 
155
#else
 
156
#  define extern_inline /* */
 
157
#  define HAVE_EXTERN_INLINE 0
 
158
#endif
 
159
 
 
160
/*
 
161
 * Some compilers give a warning if a function call that returns a value
 
162
 * is used as a statement; a few compilers give an error for the construct
 
163
 * (void)0, which is contrary to the ANSI standard.  Since we don't know of
 
164
 * any compilers that do both, we define a macro here for discarding
 
165
 * the value of an expression statement, which can be defined as either
 
166
 * including or not including the cast.  (We don't conditionalize this here,
 
167
 * because no commercial compiler gives the error on (void)0, although
 
168
 * some give warnings.)  */
 
169
#define DISCARD(expr) ((void)(expr))
 
170
/* Backward compatibility */
 
171
#define discard(expr) DISCARD(expr)
 
172
 
 
173
/*
 
174
 * Some versions of the Watcom compiler give a "Comparison result always
 
175
 * 0/1" message that we want to suppress because it gets in the way of
 
176
 * meaningful warnings.
 
177
 */
 
178
#ifdef __WATCOMC__
 
179
#  pragma disable_message(124);
 
180
#endif
 
181
 
 
182
/*
 
183
 * Some versions of gcc have a bug such that after
 
184
        byte *p;
 
185
        ...
 
186
        x = *(long *)p;
 
187
 * the compiler then thinks that p always points to long-aligned data.
 
188
 * Detect this here so it can be handled appropriately in the few places
 
189
 * that (we think) matter.
 
190
 */
 
191
#ifdef __GNUC__
 
192
# if __GNUC__ == 2 & (7 < __GNUC_MINOR__ <= 95)
 
193
#  define ALIGNMENT_ALIASING_BUG
 
194
# endif
 
195
#endif
 
196
 
 
197
/*
 
198
 * The SVR4.2 C compiler incorrectly considers the result of << and >>
 
199
 * to be unsigned if the left operand is signed and the right operand is
 
200
 * unsigned.  We believe this only causes trouble in Ghostscript code when
 
201
 * the right operand is a sizeof(...), which is unsigned for this compiler.
 
202
 * Therefore, we replace the relevant uses of sizeof with size_of:
 
203
 */
 
204
#define size_of(x) ((int)(sizeof(x)))
 
205
 
 
206
/*
 
207
 * far_data was formerly used for static data that had to be assigned its
 
208
 * own segment on PCs with 64K segments.  This was supported in Borland C++,
 
209
 * but none of the other compilers.  Since we no longer support
 
210
 * small-segment systems, far_data is vacuous.
 
211
 */
 
212
#undef far_data
 
213
#define far_data /* */
 
214
 
 
215
/*
 
216
 * Get the number of elements of a statically dimensioned array.
 
217
 * Note that this also works on array members of structures.
 
218
 */
 
219
#define countof(a) (sizeof(a) / sizeof((a)[0]))
 
220
#define count_of(a) (size_of(a) / size_of((a)[0]))
 
221
 
 
222
/*
 
223
 * Get the offset of a structure member.  Amazingly enough, the simpler
 
224
 * definition works on all compilers except for one broken MIPS compiler
 
225
 * and the IBM RS/6000.  Unfortunately, because of these two compilers,
 
226
 * we have to use the more complex definition.  Even more unfortunately,
 
227
 * the more complex definition doesn't work on the MetroWerks
 
228
 * CodeWarrior compiler (Macintosh and BeOS).
 
229
 */
 
230
#ifdef __MWERKS__
 
231
#define offset_of(type, memb)\
 
232
 ((int) &((type *) 0)->memb)
 
233
#else
 
234
#define offset_of(type, memb)\
 
235
 ((int) ( (char *)&((type *)0)->memb - (char *)((type *)0) ))
 
236
#endif
 
237
 
 
238
/*
 
239
 * Get the alignment of a pointer modulo a given power of 2.
 
240
 * There is no portable way to do this, but the following definition
 
241
 * works on all reasonable systems.
 
242
 */
 
243
#define ALIGNMENT_MOD(ptr, modu)\
 
244
  ((uint)( ((const char *)(ptr) - (const char *)0) & ((modu) - 1) ))
 
245
 
 
246
/* Define short names for the unsigned types. */
 
247
typedef unsigned char byte;
 
248
typedef unsigned char uchar;
 
249
typedef unsigned short ushort;
 
250
typedef unsigned int uint;
 
251
typedef unsigned long ulong;
 
252
 
 
253
/* Since sys/types.h may define one or more of these (depending on
 
254
 * the platform), we have to take steps to prevent name clashes.
 
255
 * Unfortunately this can clobber valid definitions for the size-
 
256
 * specific types, but there's no simple solution.
 
257
 *
 
258
 * NOTE: This requires that you include std.h *before* any other
 
259
 * header file that includes sys/types.h.
 
260
 *
 
261
 */
 
262
#define bool bool_              /* (maybe not needed) */
 
263
#define uchar uchar_
 
264
#define uint uint_
 
265
#define ushort ushort_
 
266
#define ulong ulong_
 
267
#include <sys/types.h>
 
268
#undef bool
 
269
#undef uchar
 
270
#undef uint
 
271
#undef ushort
 
272
#undef ulong
 
273
 
 
274
/*
 
275
 * Define a Boolean type.  Even though we would like it to be
 
276
 * unsigned char, it pretty well has to be int, because
 
277
 * that's what all the relational operators and && and || produce.
 
278
 * We can't make it an enumerated type, because ints don't coerce
 
279
 * freely to enums (although the opposite is true).
 
280
 * Unfortunately, at least some C++ compilers have a built-in bool type,
 
281
 * and the MetroWerks C++ compiler insists that bool be equivalent to
 
282
 * unsigned char.
 
283
 */
 
284
#ifndef __cplusplus
 
285
#ifdef __BEOS__
 
286
typedef unsigned char bool;
 
287
#else
 
288
typedef int bool;
 
289
#endif
 
290
#endif
 
291
/*
 
292
 * Older versions of MetroWerks CodeWarrior defined true and false, but they're now
 
293
 * an enum in the (MacOS) Universal Interfaces. The only way around this is to escape
 
294
 * our own definitions wherever MacTypes.h is included.
 
295
 */
 
296
#ifndef __MACOS__
 
297
#undef false
 
298
#define false ((bool)0)
 
299
#undef true
 
300
#define true ((bool)1)
 
301
#endif /* __MACOS__ */
 
302
 
 
303
/*
 
304
 * Compilers disagree as to whether macros used in macro arguments
 
305
 * should be expanded at the time of the call, or at the time of
 
306
 * final expansion.  Even authoritative documents disagree: the ANSI
 
307
 * standard says the former, but Harbison and Steele's book says the latter.
 
308
 * In order to work around this discrepancy, we have to do some very
 
309
 * ugly things in a couple of places.  We mention it here because
 
310
 * it might well trip up future developers.
 
311
 */
 
312
 
 
313
/*
 
314
 * Define the type to be used for ordering pointers (<, >=, etc.).
 
315
 * The Borland and Microsoft large models only compare the offset part
 
316
 * of segmented pointers.  Semantically, the right type to use for the
 
317
 * comparison is char huge *, but we have no idea how expensive comparing
 
318
 * such pointers is, and any type that compares all the bits of the pointer,
 
319
 * gives the right result for pointers in the same segment, and keeps
 
320
 * different segments disjoint will do.
 
321
 */
 
322
#if defined(__TURBOC__) || defined(_MSC_VER)
 
323
typedef unsigned long ptr_ord_t;
 
324
#else
 
325
typedef const char *ptr_ord_t;
 
326
#endif
 
327
/* Define all the pointer comparison operations. */
 
328
#define _PTR_CMP(p1, rel, p2)  ((ptr_ord_t)(p1) rel (ptr_ord_t)(p2))
 
329
#define PTR_LE(p1, p2) _PTR_CMP(p1, <=, p2)
 
330
#define PTR_LT(p1, p2) _PTR_CMP(p1, <, p2)
 
331
#define PTR_GE(p1, p2) _PTR_CMP(p1, >=, p2)
 
332
#define PTR_GT(p1, p2) _PTR_CMP(p1, >, p2)
 
333
#define PTR_BETWEEN(ptr, lo, hi)\
 
334
  (PTR_GE(ptr, lo) && PTR_LT(ptr, hi))
 
335
 
 
336
/* Define  min and max, but make sure to use the identical definition */
 
337
/* to the one that all the compilers seem to have.... */
 
338
#ifndef min
 
339
#  define min(a, b) (((a) < (b)) ? (a) : (b))
 
340
#endif
 
341
#ifndef max
 
342
#  define max(a, b) (((a) > (b)) ? (a) : (b))
 
343
#endif
 
344
 
 
345
/* Define a standard way to round values to a (constant) modulus. */
 
346
#define ROUND_DOWN(value, modulus)\
 
347
  ( (modulus) & ((modulus) - 1) ?       /* not a power of 2 */\
 
348
    (value) - (value) % (modulus) :\
 
349
    (value) & -(modulus) )
 
350
#define ROUND_UP(value, modulus)\
 
351
  ( (modulus) & ((modulus) - 1) ?       /* not a power of 2 */\
 
352
    ((value) + ((modulus) - 1)) / (modulus) * (modulus) :\
 
353
    ((value) + ((modulus) - 1)) & -(modulus) )
 
354
/* Backward compatibility */
 
355
#define round_up(v, m) ROUND_UP(v, m)
 
356
#define round_down(v, m) ROUND_DOWN(v, m)
 
357
 
 
358
/*
 
359
 * In pre-ANSI C, float parameters get converted to double.
 
360
 * However, if we pass a float to a function that has been declared
 
361
 * with a prototype, and the parameter has been declared as float,
 
362
 * the ANSI standard specifies that the parameter is left as float.
 
363
 * To avoid problems caused by missing prototypes,
 
364
 * we declare almost all float parameters as double.
 
365
 */
 
366
typedef double floatp;
 
367
 
 
368
/*
 
369
 * Because of C's strange insistence that ; is a terminator and not a
 
370
 * separator, compound statements {...} are not syntactically equivalent to
 
371
 * single statements.  Therefore, we define here a compound-statement
 
372
 * construct that *is* syntactically equivalent to a single statement.
 
373
 * Usage is
 
374
 *      BEGIN
 
375
 *        ...statements...
 
376
 *      END
 
377
 */
 
378
#define BEGIN   do {
 
379
#define END     } while (0)
 
380
 
 
381
/*
 
382
 * Define a handy macro for a statement that does nothing.
 
383
 * We can't just use an empty statement, since this upsets some compilers.
 
384
 */
 
385
#ifndef DO_NOTHING
 
386
#  define DO_NOTHING BEGIN END
 
387
#endif
 
388
 
 
389
/*
 
390
 * For accountability, debugging, and error messages, we pass a client
 
391
 * identification string to alloc and free, and possibly other places as
 
392
 * well.  Define the type for these strings.
 
393
 */
 
394
typedef const char *client_name_t;
 
395
/****** WHAT TO DO ABOUT client_name_string ? ******/
 
396
#define client_name_string(cname) (cname)
 
397
 
 
398
/*
 
399
 * Define the now-deprecated Pn macros for pre-ANSI compiler compatibility.
 
400
 * The double-inclusion check is replicated here because of the way that
 
401
 * jconfig.h is constructed.
 
402
 */
 
403
#ifndef stdpn_INCLUDED
 
404
#  define stdpn_INCLUDED
 
405
#include "stdpn.h"
 
406
#endif /* stdpn_INCLUDED */
 
407
 
 
408
/*
 
409
 * Define success and failure codes for 'exit'.  The only system on which
 
410
 * they are different is VMS with older DEC C versions.  We aren't sure
 
411
 * in what version DEC C started being compatible with the rest of the
 
412
 * world, and we don't know what the story is with VAX C.  If you have
 
413
 * problems, uncomment the following line or add -DOLD_VMS_C to the C
 
414
 * command line.
 
415
 */
 
416
/*#define OLD_VMS_C*/
 
417
#if defined(VMS)
 
418
#  define exit_FAILED 18
 
419
#  if (defined(OLD_VMS_C) || !defined(__DECC))
 
420
#    define exit_OK 1
 
421
#  else
 
422
#    define exit_OK 0
 
423
#  endif
 
424
#else
 
425
#  define exit_OK 0
 
426
#  define exit_FAILED 1
 
427
#endif
 
428
 
 
429
#endif /* stdpre_INCLUDED */