Commit 43792592 authored by Steve Holme's avatar Steve Holme
Browse files

endian: Added 64-bit integer read function

parent 5fbcb9a1
Loading
Loading
Loading
Loading
+36 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
@@ -62,6 +62,41 @@ unsigned int Curl_read32_le(unsigned char *buf)
         ((unsigned int)buf[2] << 16) | ((unsigned int)buf[3] << 24);
}

/*
 * Curl_read64_le()
 *
 * This function converts a 64-bit integer from the little endian format, as
 * used in the incoming package to whatever endian format we're using
 * natively.
 *
 * Parameters:
 *
 * buf      [in]     - A pointer to a 8 byte buffer.
 *
 * Returns the integer.
 */
#if defined(HAVE_LONGLONG)
unsigned long long Curl_read64_le(unsigned char *buf)
{
  return ((unsigned long long)buf[0]) |
         ((unsigned long long)buf[1] << 8) |
         ((unsigned long long)buf[2] << 16) |
         ((unsigned long long)buf[3] << 24) |
         ((unsigned long long)buf[4] << 32) |
         ((unsigned long long)buf[5] << 40) |
         ((unsigned long long)buf[6] << 48) |
         ((unsigned long long)buf[7] << 54);
}
#else
unsigned __int64 Curl_read64_le(unsigned char *buf)
{
  return ((unsigned __int64)buf[0]) | ((unsigned __int64)buf[1] << 8) |
         ((unsigned __int64)buf[2] << 16) | ((unsigned __int64)buf[3] << 24) |
         ((unsigned __int64)buf[4] << 32) | ((unsigned __int64)buf[5] << 40) |
         ((unsigned __int64)buf[6] << 48) | ((unsigned __int64)buf[7] << 54);
}
#endif

/*
 * Curl_write16_le()
 *
+10 −1
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
@@ -28,6 +28,15 @@ unsigned short Curl_read16_le(unsigned char *buf);
/* Converts a 32-bit integer from little endian */
unsigned int Curl_read32_le(unsigned char *buf);

#if (CURL_SIZEOF_CURL_OFF_T > 4)
/* Converts a 64-bit integer from little endian */
#if defined(HAVE_LONGLONG)
unsigned long long Curl_read64_le(unsigned char *buf);
#else
unsigned __int64 Curl_read64_le(unsigned char *buf);
#endif
#endif

/* Converts a 16-bit integer to little endian */
void Curl_write16_le(const short value, unsigned char *buffer);