/****************************************************************************
 *
 * ftstdlib.h
 *
 *   ANSI-specific library and header configuration file (specification
 *   only).
 *
 * Copyright (C) 2002-2020 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 FreeType~2 with all fonts.
   *
   * In these cases, `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_MIN    LONG_MIN
#define FT_LONG_MAX    LONG_MAX
#define FT_ULONG_MAX   ULONG_MAX


  /**************************************************************************
   *
   *                character and string processing
   *
   */
#include <string.h>
#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
#else
#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
#endif
#define ft_strstr   strstr
  /**************************************************************************
   *
   *                          file handling
   *
   */

#if defined(STARBOARD)
#include "starboard/string.h"
#include "starboard/file.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     SbMemoryDeallocate
#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_strtol SbStringParseSignedInteger
static SB_C_INLINE char* ft_getenv(const char* name){
  return NULL;
}
#else
#include <stdlib.h>
#define ft_strtol  strtol
#define ft_getenv  getenv
#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 */
