/***************************************************************************/
/*                                                                         */
/*  ftstdlib.h                                                             */
/*                                                                         */
/*    ANSI-specific library and header configuration file (specification   */
/*    only).                                                               */
/*                                                                         */
/*  Copyright 2002-2015 by                                                 */
/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
/*                                                                         */
/*  This file is part of the FreeType project, and may only be used,       */
/*  modified, and distributed under the terms of the FreeType project      */
/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
/*  this file you indicate that you have read the license and              */
/*  understand and accept it fully.                                        */
/*                                                                         */
/***************************************************************************/


  /*************************************************************************/
  /*                                                                       */
  /* This file is used to group all #includes to the ANSI C library that   */
  /* FreeType normally requires.  It also defines macros to rename the     */
  /* standard functions within the FreeType source code.                   */
  /*                                                                       */
  /* Load a file which defines __FTSTDLIB_H__ before this one to override  */
  /* it.                                                                   */
  /*                                                                       */
  /*************************************************************************/


#ifndef __FTSTDLIB_H__
#define __FTSTDLIB_H__


#include <stddef.h>

#define ft_ptrdiff_t  ptrdiff_t


  /**********************************************************************/
  /*                                                                    */
  /*                           integer limits                           */
  /*                                                                    */
  /* UINT_MAX and ULONG_MAX are used to automatically compute the size  */
  /* of `int' and `long' in bytes at compile-time.  So far, this works  */
  /* for all platforms the library has been tested on.                  */
  /*                                                                    */
  /* Note that on the extremely rare platforms that do not provide      */
  /* integer types that are _exactly_ 16 and 32 bits wide (e.g. some    */
  /* old Crays where `int' is 36 bits), we do not make any guarantee    */
  /* about the correct behaviour of FT2 with all fonts.                 */
  /*                                                                    */
  /* In these case, `ftconfig.h' will refuse to compile anyway with a   */
  /* message like `couldn't find 32-bit type' or something similar.     */
  /*                                                                    */
  /**********************************************************************/


#include <limits.h>

#define FT_CHAR_BIT    CHAR_BIT
#define FT_USHORT_MAX  USHRT_MAX
#define FT_INT_MAX     INT_MAX
#define FT_INT_MIN     INT_MIN
#define FT_UINT_MAX    UINT_MAX
#define FT_LONG_MAX    LONG_MAX
#define FT_ULONG_MAX   ULONG_MAX


  /**********************************************************************/
  /*                                                                    */
  /*                 character and string processing                    */
  /*                                                                    */
  /**********************************************************************/


#if defined(STARBOARD)
#include "starboard/string.h"
#include "starboard/memory.h"
#define ft_memchr   SbMemoryFindByte
#define ft_memcmp   SbMemoryCompare
#define ft_memcpy   SbMemoryCopy
#define ft_memmove  SbMemoryMove
#define ft_memset   SbMemorySet
#define ft_strcat   SbStringConcatUnsafe
#define ft_strcmp   SbStringCompareAll
#define ft_strcpy   SbStringCopyUnsafe
#define ft_strlen   SbStringGetLength
#define ft_strncmp  SbStringCompare
#define ft_strncpy  SbStringCopy
#define ft_strrchr  SbStringFindLastCharacter
#define ft_strstr   SbStringFindString
#else
#include <string.h>

#define ft_memchr   memchr
#define ft_memcmp   memcmp
#define ft_memcpy   memcpy
#define ft_memmove  memmove
#define ft_memset   memset
#define ft_strcat   strcat
#define ft_strcmp   strcmp
#define ft_strcpy   strcpy
#define ft_strlen   strlen
#define ft_strncmp  strncmp
#define ft_strncpy  strncpy
#define ft_strrchr  strrchr
#define ft_strstr   strstr
#endif


  /**********************************************************************/
  /*                                                                    */
  /*                           file handling                            */
  /*                                                                    */
  /**********************************************************************/


#if defined(STARBOARD)
#include "starboard/file.h"
#include "starboard/string.h"

#ifndef SEEK_SET
#define SEEK_SET    kSbFileFromBegin
#define SEEK_CUR    kSbFileFromCurrent
#define SEEK_END    kSbFileFromEnd
#endif
#define FT_FILE     SbFilePrivate
#define ft_fclose   SbFileClose
#define ft_fopen(p, m) SbFileOpen((p), SbFileModeStringToFlags(m), NULL, NULL)
#define ft_fread(b, s, n, f) SbFileRead((f), (char *)(b), (s) * (n))
#define ft_fseek(f, o, w) SbFileSeek((f), (w), (o))
#define ft_ftell(f)    SbFileSeek((f), kSbFileFromCurrent, 0)
#define ft_sprintf  SbStringFormatUnsafeF
#else
#include <stdio.h>

#define FT_FILE     FILE
#define ft_fclose   fclose
#define ft_fopen    fopen
#define ft_fread    fread
#define ft_fseek    fseek
#define ft_ftell    ftell
#define ft_sprintf  sprintf
#endif


  /**********************************************************************/
  /*                                                                    */
  /*                             sorting                                */
  /*                                                                    */
  /**********************************************************************/


#if defined(STARBOARD)
#include "starboard/system.h"
#define ft_qsort  SbSystemSort
#else
#include <stdlib.h>

#define ft_qsort  qsort
#endif


  /**********************************************************************/
  /*                                                                    */
  /*                        memory allocation                           */
  /*                                                                    */
  /**********************************************************************/


#if defined(STARBOARD)
#include "starboard/memory.h"
static SB_C_INLINE void *ft_scalloc(size_t nelem, size_t elsize) {
  size_t size = nelem * elsize;
  void *memory = SbMemoryAllocate(size);
  if (!memory) {
    return NULL;
  }

  SbMemorySet(memory, 0, size);
  return memory;
}
#define ft_sfree     SbMemoryFree
#define ft_smalloc   SbMemoryAllocate
#define ft_srealloc  SbMemoryReallocate
#else
#define ft_scalloc   calloc
#define ft_sfree     free
#define ft_smalloc   malloc
#define ft_srealloc  realloc
#endif


  /**********************************************************************/
  /*                                                                    */
  /*                          miscellaneous                             */
  /*                                                                    */
  /**********************************************************************/


#if defined(STARBOARD)
#define ft_atol  SbStringAToL
#else
#define ft_atol  atol
#endif


  /**********************************************************************/
  /*                                                                    */
  /*                         execution control                          */
  /*                                                                    */
  /**********************************************************************/


#include <setjmp.h>

#define ft_jmp_buf     jmp_buf  /* note: this cannot be a typedef since */
                                /*       jmp_buf is defined as a macro  */
                                /*       on certain platforms           */

#define ft_longjmp     longjmp
#define ft_setjmp( b ) setjmp( *(ft_jmp_buf*) &(b) ) /* same thing here */


  /* the following is only used for debugging purposes, i.e., if */
  /* FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined    */

#include <stdarg.h>


#endif /* __FTSTDLIB_H__ */


/* END */
