diff options
author | Tomas Kukosa <tomas.kukosa@siemens.com> | 2008-12-17 09:41:17 +0000 |
---|---|---|
committer | Tomas Kukosa <tomas.kukosa@siemens.com> | 2008-12-17 09:41:17 +0000 |
commit | 9043380793259f088ae576fac341cc54fa42f0af (patch) | |
tree | ea30582f8e9b98614b9ae598ecd8b0c8680cf42d | |
parent | cb63b11f9795d1b84e372eab423a388b8a6d986b (diff) |
type conversion gdouble<->guint64 is not supported in all MSVC versions, convert it with functions
svn path=/trunk/; revision=27032
-rw-r--r-- | epan/dissectors/packet-nasdaq-itch.c | 3 | ||||
-rw-r--r-- | wsutil/libwsutil.def | 4 | ||||
-rw-r--r-- | wsutil/type_util.c | 70 | ||||
-rw-r--r-- | wsutil/type_util.h | 54 |
4 files changed, 130 insertions, 1 deletions
diff --git a/epan/dissectors/packet-nasdaq-itch.c b/epan/dissectors/packet-nasdaq-itch.c index a7862cb6af..89040e8fa5 100644 --- a/epan/dissectors/packet-nasdaq-itch.c +++ b/epan/dissectors/packet-nasdaq-itch.c @@ -40,6 +40,7 @@ #include <string.h> #include <epan/packet.h> #include <epan/prefs.h> +#include <wsutil/type_util.h> /* Chi-X version */ static gboolean nasdaq_itch_chi_x = TRUE; @@ -256,7 +257,7 @@ price(tvbuff_t *tvb, packet_info *pinfo, proto_tree *nasdaq_itch_tree, int id, i if (nasdaq_itch_tree || col_info) { const char *str_value = tvb_get_ptr(tvb, offset, size); - gdouble value = nasdaq_itch_atoull(str_value, size)/((big)?1000000.0:10000.0); + gdouble value = guint64_to_gdouble(nasdaq_itch_atoull(str_value, size))/((big)?1000000.0:10000.0); proto_tree_add_double(nasdaq_itch_tree, id, tvb, offset, size, value); if (col_info) { diff --git a/wsutil/libwsutil.def b/wsutil/libwsutil.def index 4fe1dd7057..beb5f8a615 100644 --- a/wsutil/libwsutil.def +++ b/wsutil/libwsutil.def @@ -44,6 +44,10 @@ started_with_special_privs ascii_strdown_inplace ascii_strup_inplace +; type_util.c +type_util_gdouble_to_guint64 +type_util_guint64_to_gdouble + ; unicode-utils.c utf_16to8 utf_8to16 diff --git a/wsutil/type_util.c b/wsutil/type_util.c new file mode 100644 index 0000000000..e90575d7ba --- /dev/null +++ b/wsutil/type_util.c @@ -0,0 +1,70 @@ +/* type_util.c + * Types utility routines + * + * $Id$ + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * 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 the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include "type_util.h" + +/* + * guint64 to gdouble conversions taken from gstutils.c of GStreamer project + * + * GStreamer + * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu> + * 2000 Wim Taymans <wtay@chello.be> + * 2002 Thomas Vander Stichele <thomas@apestaart.org> + * + * gstutils.h: Header for various utility functions + * + * GNU GPL v2 + * + */ + +/* work around error C2520: conversion from unsigned __int64 to double + * not implemented, use signed __int64 + * + * These are implemented as functions because on some platforms a 64bit int to + * double conversion is not defined/implemented. + */ + +gdouble +type_util_guint64_to_gdouble(guint64 value) +{ + if (value & G_GINT64_CONSTANT (0x8000000000000000)) + return (gdouble) ((gint64) value) + (gdouble) 18446744073709551616.; + else + return (gdouble) ((gint64) value); +} + +guint64 +type_util_gdouble_to_guint64(gdouble value) +{ + if (value < (gdouble) 9223372036854775808.) /* 1 << 63 */ + return ((guint64) ((gint64) value)); + + value -= (gdouble) 18446744073709551616.; + return ((guint64) ((gint64) value)); +} diff --git a/wsutil/type_util.h b/wsutil/type_util.h new file mode 100644 index 0000000000..576e2f62bd --- /dev/null +++ b/wsutil/type_util.h @@ -0,0 +1,54 @@ +/* type_util.h + * Types utility definitions + * + * $Id$ + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * 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 the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __TYPE_UTIL_H__ +#define __TYPE_UTIL_H__ + + +/* + * guint64 to gdouble conversions taken from gstutils.h of GStreamer project + * + * GStreamer + * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu> + * 2000 Wim Taymans <wtay@chello.be> + * 2002 Thomas Vander Stichele <thomas@apestaart.org> + * + * gstutils.h: Header for various utility functions + * + * GNU GPL v2 + * + */ + +guint64 type_util_gdouble_to_guint64(gdouble value); +gdouble type_util_guint64_to_gdouble(guint64 value); + +#ifdef WIN32 +#define gdouble_to_guint64(value) type_util_gdouble_to_guint64(value) +#define guint64_to_gdouble(value) type_util_guint64_to_gdouble(value) +#else +#define gdouble_to_guint64(value) ((guint64)(value)) +#define guint64_to_gdouble(value) ((gdouble)(value)) +#endif + +#endif /* __TYPE_UTIL_H__ */ |