/*
* int64.h
*
- * Home page of code is: http://smartmontools.sourceforge.net
+ * Home page of code is: http://www.smartmontools.org
*
- * Copyright (C) 2002-6 Bruce Allen <smartmontools-support@lists.sourceforge.net>
- * Copyright (C) 2004-6 Christian Franke
+ * Copyright (C) 2002-11 Bruce Allen
+ * Copyright (C) 2004-11 Christian Franke
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* any later version.
*
* You should have received a copy of the GNU General Public License
- * (for example COPYING); if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * (for example COPYING); if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*/
#ifndef INT64_H_
#define INT64_H_
-#define INT64_H_CVSID "$Id: int64.h,v 1.13 2006/04/12 14:54:28 ballen4705 Exp $\n"
+#define INT64_H_CVSID "$Id: int64.h 4431 2017-08-08 19:38:15Z chrfranke $"
-// 64 bit integer typedefs
+// 64 bit integer typedefs and format strings
#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
+// The ISO C99 standard specifies that in C++ implementations the PRI* macros
+// from <inttypes.h> should only be defined if explicitly requested
+#define __STDC_FORMAT_MACROS 1
+#include <inttypes.h> // PRId64, PRIu64, PRIx64 (also includes <stdint.h>)
#else
#ifdef HAVE_STDINT_H
-#include <stdint.h>
+#include <stdint.h> // int64_t, uint64_t (usually included above)
#else
#ifdef HAVE_SYS_INTTYPES_H
#include <sys/inttypes.h>
#include <sys/int_types.h>
#else
#if defined(_WIN32) && defined(_MSC_VER)
-// for MSVC 6.0
+// for MSVC <= 9 (MSVC10 and MinGW provide <stdint.h>)
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
#else
#endif // HAVE_STDINT_H
#endif // HAVE_INTTYPES_H
-// 64 bit integer format strings
-
-#if defined(_WIN32) && defined(_MSC_VER)
-// for MSVC 6.0
+#if defined(_WIN32) && !defined(PRId64)
+// for MSVC (MinGW provides <inttypes.h>)
#define PRId64 "I64d"
#define PRIu64 "I64u"
#define PRIx64 "I64x"
-#endif // _WIN32 && _MSC_VER
+#endif // _WIN32 && !PRId64
// If macros not defined in inttypes.h, fix here. Default is GCC
// style
-#ifndef PRId64
+#ifndef PRId64
#define PRId64 "lld"
#endif // ndef PRId64
#define PRIx64 "llx"
#endif // ndef PRIx64
-
-#if defined(_WIN32) && defined(_MSC_VER)
-// for MSVC 6.0: "unsigned __int64 -> double" conversion not implemented (why?-)
-__inline double uint64_to_double(uint64_t ull) {
- return ((int64_t)ull >= 0 ? (double)(int64_t)ull :
- ((double)(int64_t)(ull - 9223372036854775808UI64)) + 9223372036854775808.0);
-}
-#else
-#define uint64_to_double(ull) ((double)(ull))
-#endif // _WIN32 && _MSC_VER
-
-
#endif // INT64_H