1*7dd7cddfSDavid du Colombier /* 2*7dd7cddfSDavid du Colombier * jinclude.h 3*7dd7cddfSDavid du Colombier * 4*7dd7cddfSDavid du Colombier * Copyright (C) 1991-1994, Thomas G. Lane. 5*7dd7cddfSDavid du Colombier * This file is part of the Independent JPEG Group's software. 6*7dd7cddfSDavid du Colombier * For conditions of distribution and use, see the accompanying README file. 7*7dd7cddfSDavid du Colombier * 8*7dd7cddfSDavid du Colombier * This file exists to provide a single place to fix any problems with 9*7dd7cddfSDavid du Colombier * including the wrong system include files. (Common problems are taken 10*7dd7cddfSDavid du Colombier * care of by the standard jconfig symbols, but on really weird systems 11*7dd7cddfSDavid du Colombier * you may have to edit this file.) 12*7dd7cddfSDavid du Colombier * 13*7dd7cddfSDavid du Colombier * NOTE: this file is NOT intended to be included by applications using the 14*7dd7cddfSDavid du Colombier * JPEG library. Most applications need only include jpeglib.h. 15*7dd7cddfSDavid du Colombier */ 16*7dd7cddfSDavid du Colombier 17*7dd7cddfSDavid du Colombier 18*7dd7cddfSDavid du Colombier /* Include auto-config file to find out which system include files we need. */ 19*7dd7cddfSDavid du Colombier 20*7dd7cddfSDavid du Colombier #include "jconfig.h" /* auto configuration options */ 21*7dd7cddfSDavid du Colombier #define JCONFIG_INCLUDED /* so that jpeglib.h doesn't do it again */ 22*7dd7cddfSDavid du Colombier 23*7dd7cddfSDavid du Colombier /* 24*7dd7cddfSDavid du Colombier * We need the NULL macro and size_t typedef. 25*7dd7cddfSDavid du Colombier * On an ANSI-conforming system it is sufficient to include <stddef.h>. 26*7dd7cddfSDavid du Colombier * Otherwise, we get them from <stdlib.h> or <stdio.h>; we may have to 27*7dd7cddfSDavid du Colombier * pull in <sys/types.h> as well. 28*7dd7cddfSDavid du Colombier * Note that the core JPEG library does not require <stdio.h>; 29*7dd7cddfSDavid du Colombier * only the default error handler and data source/destination modules do. 30*7dd7cddfSDavid du Colombier * But we must pull it in because of the references to FILE in jpeglib.h. 31*7dd7cddfSDavid du Colombier * You can remove those references if you want to compile without <stdio.h>. 32*7dd7cddfSDavid du Colombier */ 33*7dd7cddfSDavid du Colombier 34*7dd7cddfSDavid du Colombier #ifdef HAVE_STDDEF_H 35*7dd7cddfSDavid du Colombier #include <stddef.h> 36*7dd7cddfSDavid du Colombier #endif 37*7dd7cddfSDavid du Colombier 38*7dd7cddfSDavid du Colombier #ifdef HAVE_STDLIB_H 39*7dd7cddfSDavid du Colombier #include <stdlib.h> 40*7dd7cddfSDavid du Colombier #endif 41*7dd7cddfSDavid du Colombier 42*7dd7cddfSDavid du Colombier #ifdef NEED_SYS_TYPES_H 43*7dd7cddfSDavid du Colombier #include <sys/types.h> 44*7dd7cddfSDavid du Colombier #endif 45*7dd7cddfSDavid du Colombier 46*7dd7cddfSDavid du Colombier #include <stdio.h> 47*7dd7cddfSDavid du Colombier 48*7dd7cddfSDavid du Colombier /* 49*7dd7cddfSDavid du Colombier * We need memory copying and zeroing functions, plus strncpy(). 50*7dd7cddfSDavid du Colombier * ANSI and System V implementations declare these in <string.h>. 51*7dd7cddfSDavid du Colombier * BSD doesn't have the mem() functions, but it does have bcopy()/bzero(). 52*7dd7cddfSDavid du Colombier * Some systems may declare memset and memcpy in <memory.h>. 53*7dd7cddfSDavid du Colombier * 54*7dd7cddfSDavid du Colombier * NOTE: we assume the size parameters to these functions are of type size_t. 55*7dd7cddfSDavid du Colombier * Change the casts in these macros if not! 56*7dd7cddfSDavid du Colombier */ 57*7dd7cddfSDavid du Colombier 58*7dd7cddfSDavid du Colombier #ifdef NEED_BSD_STRINGS 59*7dd7cddfSDavid du Colombier 60*7dd7cddfSDavid du Colombier #include <strings.h> 61*7dd7cddfSDavid du Colombier #define MEMZERO(target,size) bzero((void *)(target), (size_t)(size)) 62*7dd7cddfSDavid du Colombier #define MEMCOPY(dest,src,size) bcopy((const void *)(src), (void *)(dest), (size_t)(size)) 63*7dd7cddfSDavid du Colombier 64*7dd7cddfSDavid du Colombier #else /* not BSD, assume ANSI/SysV string lib */ 65*7dd7cddfSDavid du Colombier 66*7dd7cddfSDavid du Colombier #include <string.h> 67*7dd7cddfSDavid du Colombier #define MEMZERO(target,size) memset((void *)(target), 0, (size_t)(size)) 68*7dd7cddfSDavid du Colombier #define MEMCOPY(dest,src,size) memcpy((void *)(dest), (const void *)(src), (size_t)(size)) 69*7dd7cddfSDavid du Colombier 70*7dd7cddfSDavid du Colombier #endif 71*7dd7cddfSDavid du Colombier 72*7dd7cddfSDavid du Colombier /* 73*7dd7cddfSDavid du Colombier * In ANSI C, and indeed any rational implementation, size_t is also the 74*7dd7cddfSDavid du Colombier * type returned by sizeof(). However, it seems there are some irrational 75*7dd7cddfSDavid du Colombier * implementations out there, in which sizeof() returns an int even though 76*7dd7cddfSDavid du Colombier * size_t is defined as long or unsigned long. To ensure consistent results 77*7dd7cddfSDavid du Colombier * we always use this SIZEOF() macro in place of using sizeof() directly. 78*7dd7cddfSDavid du Colombier */ 79*7dd7cddfSDavid du Colombier 80*7dd7cddfSDavid du Colombier #define SIZEOF(object) ((size_t) sizeof(object)) 81*7dd7cddfSDavid du Colombier 82*7dd7cddfSDavid du Colombier /* 83*7dd7cddfSDavid du Colombier * The modules that use fread() and fwrite() always invoke them through 84*7dd7cddfSDavid du Colombier * these macros. On some systems you may need to twiddle the argument casts. 85*7dd7cddfSDavid du Colombier * CAUTION: argument order is different from underlying functions! 86*7dd7cddfSDavid du Colombier */ 87*7dd7cddfSDavid du Colombier 88*7dd7cddfSDavid du Colombier #define JFREAD(file,buf,sizeofbuf) \ 89*7dd7cddfSDavid du Colombier ((size_t) fread((void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file))) 90*7dd7cddfSDavid du Colombier #define JFWRITE(file,buf,sizeofbuf) \ 91*7dd7cddfSDavid du Colombier ((size_t) fwrite((const void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file))) 92