source: libcaca/trunk/stubs.h @ 2299

Last change on this file since 2299 was 2299, checked in by Sam Hocevar, 12 years ago
  • Remove #include <stdint.h> etc. from "common.h". Instead, make sure that <cucul.h> will provide the C99 types, even if libcaca has been installed.
  • Rename what's left of "common.h" to "stubs.h".
  • Remove all references to erroneous <inttypes.h> from source files.
  • Property svn:keywords set to Id
File size: 2.5 KB
Line 
1/*
2 *  libcucul      Canvas for ultrafast compositing of Unicode letters
3 *  libcaca       Colour ASCII-Art library
4 *  Copyright (c) 2006 Sam Hocevar <sam@zoy.org>
5 *                All Rights Reserved
6 *
7 *  $Id: stubs.h 2299 2008-04-19 12:42:50Z sam $
8 *
9 *  This library is free software; you can redistribute it and/or
10 *  modify it under the terms of the Do What The Fuck You Want To
11 *  Public License, Version 2, as published by Sam Hocevar. See
12 *  http://sam.zoy.org/wtfpl/COPYING for more details.
13 */
14
15/*
16 *  This file contains replacements for commonly found object types and
17 *  function prototypes that are sometimes missing.
18 */
19
20#ifndef __STUBS_H__
21#define __STUBS_H__
22
23/* errno handling */
24#if defined HAVE_ERRNO_H && !defined __KERNEL__
25#   include <errno.h>
26static inline void seterrno(int e) { errno = e; }
27static inline int geterrno(void) { return errno; }
28#else
29#   define seterrno(x) do { (void)(x); } while(0)
30#   define geterrno(x) 0
31#endif
32
33/* debug messages */
34#if defined DEBUG && !defined __KERNEL__
35#   include <stdio.h>
36#   include <stdarg.h>
37static inline void debug(const char *format, ...)
38{
39    int saved_errno = geterrno();
40    va_list args;
41    va_start(args, format);
42    fprintf(stderr, "** libcaca debug ** ");
43    vfprintf(stderr, format, args);
44    fprintf(stderr, "\n");
45    va_end(args);
46    seterrno(saved_errno);
47}
48#else
49#   define debug(format, ...) do {} while(0)
50#endif
51
52/* hton16() and hton32() */
53#if defined HAVE_HTONS
54#   if defined __KERNEL__
55        /* Nothing to do */
56#   elif defined HAVE_ARPA_INET_H
57#       include <arpa/inet.h>
58#   elif defined HAVE_NETINET_IN_H
59#       include <netinet/in.h>
60#   endif
61#   define hton16 htons
62#   define hton32 htonl
63#else
64#   if defined HAVE_ENDIAN_H
65#       include <endian.h>
66#   endif
67static inline uint16_t hton16(uint16_t x)
68{
69    /* This is compile-time optimised with at least -O1 or -Os */
70#if defined HAVE_ENDIAN_H
71    if(__BYTE_ORDER == __BIG_ENDIAN)
72#else
73    uint32_t const dummy = 0x12345678;
74    if(*(uint8_t const *)&dummy == 0x12)
75#endif
76        return x;
77    else
78        return (x >> 8) | (x << 8);
79}
80
81static inline uint32_t hton32(uint32_t x)
82{
83    /* This is compile-time optimised with at least -O1 or -Os */
84#if defined HAVE_ENDIAN_H
85    if(__BYTE_ORDER == __BIG_ENDIAN)
86#else
87    uint32_t const dummy = 0x12345678;
88    if(*(uint8_t const *)&dummy == 0x12)
89#endif
90        return x;
91    else
92        return (x >> 24) | ((x >> 8) & 0x0000ff00)
93                | ((x << 8) & 0x00ff0000) | (x << 24);
94}
95#endif
96
97#endif /* __STUBS_H__ */
98
Note: See TracBrowser for help on using the repository browser.