mirror of
https://github.com/vale981/libblobpack
synced 2025-03-04 09:21:42 -05:00
port to avr
This commit is contained in:
parent
4bb494cf13
commit
1250439e71
9 changed files with 161 additions and 48 deletions
100
configure
vendored
100
configure
vendored
|
@ -1775,6 +1775,97 @@ $as_echo "$ac_res" >&6; }
|
|||
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
|
||||
|
||||
} # ac_fn_c_check_func
|
||||
|
||||
# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
|
||||
# -------------------------------------------------------
|
||||
# Tests whether HEADER exists, giving a warning if it cannot be compiled using
|
||||
# the include files in INCLUDES and setting the cache variable VAR
|
||||
# accordingly.
|
||||
ac_fn_c_check_header_mongrel ()
|
||||
{
|
||||
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
||||
if eval \${$3+:} false; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
|
||||
$as_echo_n "checking for $2... " >&6; }
|
||||
if eval \${$3+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
fi
|
||||
eval ac_res=\$$3
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
|
||||
$as_echo "$ac_res" >&6; }
|
||||
else
|
||||
# Is the header compilable?
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
|
||||
$as_echo_n "checking $2 usability... " >&6; }
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
$4
|
||||
#include <$2>
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"; then :
|
||||
ac_header_compiler=yes
|
||||
else
|
||||
ac_header_compiler=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
|
||||
$as_echo "$ac_header_compiler" >&6; }
|
||||
|
||||
# Is the header present?
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
|
||||
$as_echo_n "checking $2 presence... " >&6; }
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <$2>
|
||||
_ACEOF
|
||||
if ac_fn_c_try_cpp "$LINENO"; then :
|
||||
ac_header_preproc=yes
|
||||
else
|
||||
ac_header_preproc=no
|
||||
fi
|
||||
rm -f conftest.err conftest.i conftest.$ac_ext
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
|
||||
$as_echo "$ac_header_preproc" >&6; }
|
||||
|
||||
# So? What about this header?
|
||||
case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
|
||||
yes:no: )
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
|
||||
$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
|
||||
$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
|
||||
;;
|
||||
no:yes:* )
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
|
||||
$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
|
||||
$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
|
||||
$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
|
||||
$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
|
||||
$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
|
||||
( $as_echo "## -------------------------------------- ##
|
||||
## Report this to mkschreder.uk@gmail.com ##
|
||||
## -------------------------------------- ##"
|
||||
) | sed "s/^/$as_me: WARNING: /" >&2
|
||||
;;
|
||||
esac
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
|
||||
$as_echo_n "checking for $2... " >&6; }
|
||||
if eval \${$3+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
eval "$3=\$ac_header_compiler"
|
||||
fi
|
||||
eval ac_res=\$$3
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
|
||||
$as_echo "$ac_res" >&6; }
|
||||
fi
|
||||
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
|
||||
|
||||
} # ac_fn_c_check_header_mongrel
|
||||
cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
@ -12569,6 +12660,15 @@ fi
|
|||
|
||||
|
||||
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_unistd_h" = xyes; then :
|
||||
|
||||
$as_echo "#define HAVE_UNISTD_H 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
|
||||
|
||||
ac_config_files="$ac_config_files Makefile src/Makefile test/Makefile"
|
||||
|
||||
cat >confcache <<\_ACEOF
|
||||
|
|
|
@ -13,5 +13,10 @@ LT_INIT
|
|||
|
||||
AC_PROG_CC
|
||||
|
||||
AC_CHECK_HEADER([unistd.h],
|
||||
[AC_DEFINE([HAVE_UNISTD_H], [1],
|
||||
[Define to 1 if you have <unistd.h>.])],
|
||||
[])
|
||||
|
||||
AC_OUTPUT(Makefile src/Makefile test/Makefile)
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ static inline blob_offset_t blob_field_to_offset(struct blob *buf, struct blob_f
|
|||
return (blob_offset_t)((char *)attr - (char *) buf->buf);
|
||||
}
|
||||
|
||||
static void blob_field_init(struct blob_field *attr, int id, unsigned int len){
|
||||
static void blob_field_init(struct blob_field *attr, uint32_t id, uint32_t len){
|
||||
assert(attr);
|
||||
memset(attr, 0, sizeof(struct blob_field));
|
||||
//len += sizeof(struct blob_field);
|
||||
|
@ -213,7 +213,7 @@ blob_offset_t blob_open_array(struct blob *buf){
|
|||
}
|
||||
|
||||
void blob_close_array(struct blob *buf, blob_offset_t offset){
|
||||
if((unsigned long)offset > blob_size(buf)) return;
|
||||
if((int)offset > blob_size(buf)) return;
|
||||
struct blob_field *attr = blob_offset_to_attr(buf, offset);
|
||||
int len = (buf->buf + blob_field_raw_len(blob_head(buf))) - (void*)attr;
|
||||
blob_field_set_raw_len(attr, len);
|
||||
|
@ -225,7 +225,7 @@ blob_offset_t blob_open_table(struct blob *buf){
|
|||
}
|
||||
|
||||
void blob_close_table(struct blob *buf, blob_offset_t offset){
|
||||
if((unsigned long)offset > blob_size(buf)) return;
|
||||
if((int)offset > blob_size(buf)) return;
|
||||
struct blob_field *attr = blob_offset_to_attr(buf, offset);
|
||||
int len = (buf->buf + blob_field_raw_len(blob_head(buf))) - (void*)attr;
|
||||
blob_field_set_raw_len(attr, len);
|
||||
|
|
|
@ -239,13 +239,13 @@ static void blob_format_element(struct strbuf *s, struct blob_field *attr, bool
|
|||
sprintf(buf, "%d", be16_to_cpu(*(uint16_t *)data));
|
||||
break;
|
||||
case BLOB_FIELD_INT32:
|
||||
sprintf(buf, "%d", (int32_t) be32_to_cpu(*(uint32_t *)data));
|
||||
sprintf(buf, "%lu", (int32_t) be32_to_cpu(*(uint32_t *)data));
|
||||
break;
|
||||
case BLOB_FIELD_INT64:
|
||||
sprintf(buf, "%" PRId64, (int64_t) be64_to_cpu(*(uint64_t *)data));
|
||||
sprintf(buf, "%llu", (int64_t) be64_to_cpu(*(uint64_t *)data));
|
||||
break;
|
||||
case BLOB_FIELD_FLOAT32:
|
||||
sprintf(buf, "%f", (float) unpack754_32(be32_to_cpu(*(uint32_t*)data)));
|
||||
sprintf(buf, "%f", (double) unpack754_32(be32_to_cpu(*(uint32_t*)data)));
|
||||
break;
|
||||
case BLOB_FIELD_FLOAT64:
|
||||
sprintf(buf, "%Le", unpack754_64(be64_to_cpu(*(uint64_t*)data)));
|
||||
|
|
|
@ -41,9 +41,9 @@ http://www.opensource.apple.com/source/tcl/tcl-14/tcl/license.terms
|
|||
#include "blobpack.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
//#include <unistd.h>
|
||||
//#include <fcntl.h>
|
||||
//#include <sys/stat.h>
|
||||
#include "ujson.h"
|
||||
|
||||
#define DEBUG(...) {}
|
||||
|
@ -57,13 +57,15 @@ void Object_arrayAddItem(void *prv, JSOBJ obj, JSOBJ value){
|
|||
DEBUG("new array item \n");
|
||||
}
|
||||
|
||||
JSOBJ Object_newString(void *prv, wchar_t *start, wchar_t *end){
|
||||
JSOBJ Object_newString(void *prv, char *start, char *end){
|
||||
size_t len = end - start + 1;
|
||||
char *str = alloca(len);
|
||||
char *str = malloc(len);
|
||||
memset(str, 0, len);
|
||||
wcstombs(str, start, end - start);
|
||||
strncpy(str, start, end - start);
|
||||
DEBUG("new string %s\n", str);
|
||||
return blob_put_string(prv, str);
|
||||
void* ret = blob_put_string(prv, str);
|
||||
free(str);
|
||||
return ret;
|
||||
}
|
||||
|
||||
JSOBJ Object_newTrue(void *prv){
|
||||
|
@ -183,6 +185,7 @@ bool blob_init_from_json(struct blob *self, const char *json){
|
|||
return true;
|
||||
}
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
bool blob_put_json_from_file(struct blob *self, const char *file){
|
||||
// this is a rather simplistic approach where we just load the whole file into memory and then parse the buffer.
|
||||
// there can probably be better ways where we parse data in place..
|
||||
|
@ -193,13 +196,15 @@ bool blob_put_json_from_file(struct blob *self, const char *file){
|
|||
file_size = lseek(fd, SEEK_END, 0);
|
||||
if(file_size > 1000000UL) { close(fd); return false; }
|
||||
lseek(fd, SEEK_SET, 0);
|
||||
char *buffer = alloca(file_size + 1); // allocate on stack
|
||||
char *buffer = malloc(file_size + 1); // allocate on stack
|
||||
memset(buffer, 0, file_size + 1);
|
||||
if(file_size != read(fd, buffer, file_size)){
|
||||
close(fd);
|
||||
return false;
|
||||
}
|
||||
close(fd);
|
||||
return blob_put_json(self, buffer);
|
||||
int ret = blob_put_json(self, buffer);
|
||||
free(buffer);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -54,7 +54,6 @@ tree doesn't have cyclic references.
|
|||
#define __ULTRAJSON_H__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <wchar.h>
|
||||
|
||||
// Don't output any extra whitespaces when encoding
|
||||
#define JSON_NO_EXTRA_WHITESPACE
|
||||
|
@ -77,7 +76,7 @@ tree doesn't have cyclic references.
|
|||
/*
|
||||
Dictates and limits how much stack space for buffers UltraJSON will use before resorting to provided heap functions */
|
||||
#ifndef JSON_MAX_STACK_BUFFER_SIZE
|
||||
#define JSON_MAX_STACK_BUFFER_SIZE 131072
|
||||
#define JSON_MAX_STACK_BUFFER_SIZE 64
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
|
@ -300,7 +299,7 @@ EXPORTFUNCTION char *JSON_EncodeObject(JSOBJ obj, JSONObjectEncoder *enc, char *
|
|||
|
||||
typedef struct __JSONObjectDecoder
|
||||
{
|
||||
JSOBJ (*newString)(void *prv, wchar_t *start, wchar_t *end);
|
||||
JSOBJ (*newString)(void *prv, char *start, char *end);
|
||||
void (*objectAddKey)(void *prv, JSOBJ obj, JSOBJ name, JSOBJ value);
|
||||
void (*arrayAddItem)(void *prv, JSOBJ obj, JSOBJ value);
|
||||
JSOBJ (*newTrue)(void *prv);
|
||||
|
|
|
@ -41,7 +41,6 @@ http://www.opensource.apple.com/source/tcl/tcl-14/tcl/license.terms
|
|||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <wchar.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
|
||||
|
@ -57,8 +56,8 @@ struct DecoderState
|
|||
{
|
||||
char *start;
|
||||
char *end;
|
||||
wchar_t *escStart;
|
||||
wchar_t *escEnd;
|
||||
char *escStart;
|
||||
char *escEnd;
|
||||
int escHeap;
|
||||
int lastType;
|
||||
JSUINT32 objDepth;
|
||||
|
@ -427,8 +426,8 @@ JSOBJ decode_string ( struct DecoderState *ds)
|
|||
JSUTF16 sur[2] = { 0 };
|
||||
int iSur = 0;
|
||||
int index;
|
||||
wchar_t *escOffset;
|
||||
wchar_t *escStart;
|
||||
char *escOffset;
|
||||
char *escStart;
|
||||
size_t escLen = (ds->escEnd - ds->escStart);
|
||||
JSUINT8 *inputOffset;
|
||||
JSUINT8 oct;
|
||||
|
@ -442,11 +441,11 @@ JSOBJ decode_string ( struct DecoderState *ds)
|
|||
|
||||
if (ds->escHeap)
|
||||
{
|
||||
if (newSize > (SIZE_MAX / sizeof(wchar_t)))
|
||||
if (newSize > (SIZE_MAX / sizeof(char)))
|
||||
{
|
||||
return SetError(ds, -1, "Could not reserve memory block");
|
||||
}
|
||||
escStart = (wchar_t *)ds->dec->realloc(ds->escStart, newSize * sizeof(wchar_t));
|
||||
escStart = (char *)ds->dec->realloc(ds->escStart, newSize * sizeof(char));
|
||||
if (!escStart)
|
||||
{
|
||||
ds->dec->free(ds->escStart);
|
||||
|
@ -456,18 +455,18 @@ JSOBJ decode_string ( struct DecoderState *ds)
|
|||
}
|
||||
else
|
||||
{
|
||||
wchar_t *oldStart = ds->escStart;
|
||||
if (newSize > (SIZE_MAX / sizeof(wchar_t)))
|
||||
char *oldStart = ds->escStart;
|
||||
if (newSize > (SIZE_MAX / sizeof(char)))
|
||||
{
|
||||
return SetError(ds, -1, "Could not reserve memory block");
|
||||
}
|
||||
ds->escStart = (wchar_t *) ds->dec->malloc(newSize * sizeof(wchar_t));
|
||||
ds->escStart = (char *) ds->dec->malloc(newSize * sizeof(char));
|
||||
if (!ds->escStart)
|
||||
{
|
||||
return SetError(ds, -1, "Could not reserve memory block");
|
||||
}
|
||||
ds->escHeap = 1;
|
||||
memcpy(ds->escStart, oldStart, escLen * sizeof(wchar_t));
|
||||
memcpy(ds->escStart, oldStart, escLen * sizeof(char));
|
||||
}
|
||||
|
||||
ds->escEnd = ds->escStart + newSize;
|
||||
|
@ -563,7 +562,7 @@ JSOBJ decode_string ( struct DecoderState *ds)
|
|||
iSur ++;
|
||||
break;
|
||||
}
|
||||
(*escOffset++) = (wchar_t) sur[iSur];
|
||||
(*escOffset++) = (char) sur[iSur];
|
||||
iSur = 0;
|
||||
}
|
||||
else
|
||||
|
@ -574,10 +573,10 @@ JSOBJ decode_string ( struct DecoderState *ds)
|
|||
return SetError (ds, -1, "Unpaired high surrogate when decoding 'string'");
|
||||
}
|
||||
#if WCHAR_MAX == 0xffff
|
||||
(*escOffset++) = (wchar_t) sur[0];
|
||||
(*escOffset++) = (wchar_t) sur[1];
|
||||
(*escOffset++) = (char) sur[0];
|
||||
(*escOffset++) = (char) sur[1];
|
||||
#else
|
||||
(*escOffset++) = (wchar_t) 0x10000 + (((sur[0] - 0xd800) << 10) | (sur[1] - 0xdc00));
|
||||
(*escOffset++) = (char) 0x10000 + (((sur[0] - 0xd800) << 10) | (sur[1] - 0xdc00));
|
||||
#endif
|
||||
iSur = 0;
|
||||
}
|
||||
|
@ -591,7 +590,7 @@ JSOBJ decode_string ( struct DecoderState *ds)
|
|||
|
||||
case 1:
|
||||
{
|
||||
*(escOffset++) = (wchar_t) (*inputOffset++);
|
||||
*(escOffset++) = (char) (*inputOffset++);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -605,7 +604,7 @@ JSOBJ decode_string ( struct DecoderState *ds)
|
|||
}
|
||||
ucs |= (*inputOffset++) & 0x3f;
|
||||
if (ucs < 0x80) return SetError (ds, -1, "Overlong 2 byte UTF-8 sequence detected when decoding 'string'");
|
||||
*(escOffset++) = (wchar_t) ucs;
|
||||
*(escOffset++) = (char) ucs;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -628,7 +627,7 @@ JSOBJ decode_string ( struct DecoderState *ds)
|
|||
}
|
||||
|
||||
if (ucs < 0x800) return SetError (ds, -1, "Overlong 3 byte UTF-8 sequence detected when encoding string");
|
||||
*(escOffset++) = (wchar_t) ucs;
|
||||
*(escOffset++) = (char) ucs;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -656,15 +655,15 @@ JSOBJ decode_string ( struct DecoderState *ds)
|
|||
if (ucs >= 0x10000)
|
||||
{
|
||||
ucs -= 0x10000;
|
||||
*(escOffset++) = (wchar_t) (ucs >> 10) + 0xd800;
|
||||
*(escOffset++) = (wchar_t) (ucs & 0x3ff) + 0xdc00;
|
||||
*(escOffset++) = (char) (ucs >> 10) + 0xd800;
|
||||
*(escOffset++) = (char) (ucs & 0x3ff) + 0xdc00;
|
||||
}
|
||||
else
|
||||
{
|
||||
*(escOffset++) = (wchar_t) ucs;
|
||||
*(escOffset++) = (char) ucs;
|
||||
}
|
||||
#else
|
||||
*(escOffset++) = (wchar_t) ucs;
|
||||
*(escOffset++) = (char) ucs;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
@ -866,14 +865,14 @@ JSOBJ JSON_DecodeObject(JSONObjectDecoder *dec, const char *buffer, size_t cbBuf
|
|||
/*
|
||||
FIXME: Base the size of escBuffer of that of cbBuffer so that the unicode escaping doesn't run into the wall each time */
|
||||
struct DecoderState ds;
|
||||
wchar_t escBuffer[(JSON_MAX_STACK_BUFFER_SIZE / sizeof(wchar_t))];
|
||||
char escBuffer[(JSON_MAX_STACK_BUFFER_SIZE / sizeof(char))];
|
||||
JSOBJ ret;
|
||||
|
||||
ds.start = (char *) buffer;
|
||||
ds.end = ds.start + cbBuffer;
|
||||
|
||||
ds.escStart = escBuffer;
|
||||
ds.escEnd = ds.escStart + (JSON_MAX_STACK_BUFFER_SIZE / sizeof(wchar_t));
|
||||
ds.escEnd = ds.escStart + (JSON_MAX_STACK_BUFFER_SIZE / sizeof(char));
|
||||
ds.escHeap = 0;
|
||||
ds.prv = dec->prv;
|
||||
ds.dec = dec;
|
||||
|
|
|
@ -42,9 +42,13 @@ http://www.opensource.apple.com/source/tcl/tcl-14/tcl/license.terms
|
|||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#include <limits.h>
|
||||
#include <float.h>
|
||||
|
||||
#ifndef HUGE_VAL
|
||||
#define HUGE_VAL INT_MAX
|
||||
#endif
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif
|
||||
|
@ -344,7 +348,7 @@ int Buffer_EscapeStringValidated (JSOBJ obj, JSONObjectEncoder *enc, const char
|
|||
memcpy(&in8, io + 2, sizeof(JSUINT8));
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
in = (JSUTF32) in16;
|
||||
in |= in8 << 16;
|
||||
in |= (JSUTF32)in8 << 16;
|
||||
ucs = ((in & 0x0f) << 12) | ((in & 0x3f00) >> 2) | ((in & 0x3f0000) >> 16);
|
||||
#else
|
||||
in = in16 << 8;
|
||||
|
|
|
@ -19,11 +19,9 @@
|
|||
#ifndef __LIBUBOX_UTILS_H
|
||||
#define __LIBUBOX_UTILS_H
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <time.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*
|
||||
* calloc_a(size_t len, [void **addr, size_t len,...], NULL)
|
||||
|
@ -85,6 +83,9 @@ int clock_gettime(int type, struct timespec *tv);
|
|||
#include <sys/endian.h>
|
||||
#define bswap_32(x) bswap32(x)
|
||||
#define bswap_64(x) bswap64(x)
|
||||
#elif defined(__AVR)
|
||||
#define __LITTLE_ENDIAN 1234
|
||||
#define __BYTE_ORDER __LITTLE_ENDIAN
|
||||
#else
|
||||
#include <machine/endian.h>
|
||||
#define bswap_32(x) swap32(x)
|
||||
|
|
Loading…
Add table
Reference in a new issue