On Aug 13, 2013, at 9:18 PM, Guy Harris <g...@alum.mit.edu> wrote:

> On Aug 13, 2013, at 8:24 PM, DbdM Tbt <spin....@gmail.com> wrote:
> 
>> I would like to update I just now used an SVN checkout of wireshark and 
>> error C2133 will not anymore occur.
>> I was mistaken. I didn't expect that I needed the updates to other files 
>> aside from etypes.h.
>> About my development situation is that my target is the latest release (of 
>> which i assume, meant latest 'stable' release).
>> I will try to ask if the higher-ups will agree to using the development 
>> version of wireshark.
>> But in the meantime, I will try to update my working copy with any other 
>> files needed to be updated (i.e. ws_symbol_export.h was mentioned).
> 
> If by "working copy" you mean your 1.10.1 tree, there are more files for this 
> fix than just ws_symbol_export.h, and in order for us to find what files they 
> are, we'd have to do the work necessary to backport the fixes in question to 
> the 1.10.1 tree.  That might be the right thing to do.

I tried, but the resulting version of TShark crashed when the buildbot ran some 
capturing tests.

I've attached a patch with the changes.  I have no time to try to figure out 
what would need to be done, so you're on your own there; note that we don't 
develop C++ dissectors as part of the project, and don't guarantee that they'll 
work.

Index: ws_symbol_export.h
===================================================================
--- ws_symbol_export.h  (revision 51352)
+++ ws_symbol_export.h  (revision 51353)
@@ -49,33 +49,96 @@
 
 /* Originally copied from GCC Wiki at http://gcc.gnu.org/wiki/Visibility */
 #if defined _WIN32 || defined __CYGWIN__
+  /* Compiling for Windows, so we use the Windows DLL declarations. */
   #ifdef WS_BUILD_DLL
+    /*
+     * Building a DLL; for all definitions, we want dllexport, and
+     * (presumably so source from DLL and source from a program using the
+     * DLL can both include a header that declares APIs and exported data
+     * for the DLL), for declarations, either dllexport or dllimport will
+     * work (they mean the same thing for a declaration when building a DLL).
+     */
     #ifdef __GNUC__
-#define WS_DLL_PUBLIC __attribute__ ((dllexport))
+      /* GCC */
+#define WS_DLL_PUBLIC_NOEXTERN __attribute__ ((dllexport))
     #else /* ! __GNUC__ */
-#define WS_DLL_PUBLIC __declspec(dllexport) /* Note: actually gcc seems to 
also support this syntax. */
+      /*
+       * Presumably MSVC.
+       * Note: actually gcc seems to also support this syntax.
+       */
+#define WS_DLL_PUBLIC_NOEXTERN __declspec(dllexport)
     #endif /* __GNUC__ */
-  #else
+  #else /* WS_BUILD_DLL */
+    /*
+     * Building a program; we should only see declarations, not definitions,
+     * with WS_DLL_PUBLIC, and they all represent APIs or data imported
+     * from a DLL, so use dllimport.
+     *
+     * For functions, export shouldn't be necessary; for data, it might
+     * be necessary, e.g. if what's declared is an array whose size is
+     * not given in the declaration.
+     */
     #ifdef __GNUC__
-#define WS_DLL_PUBLIC __attribute__ ((dllimport))
+      /* GCC */
+#define WS_DLL_PUBLIC_NOEXTERN __attribute__ ((dllimport))
     #elif ! (defined ENABLE_STATIC) /* ! __GNUC__ */
-#define WS_DLL_PUBLIC __declspec(dllimport) /* Note: actually gcc seems to 
also support this syntax. */
+      /*
+       * Presumably MSVC, and we're not building all-static.
+       * Note: actually gcc seems to also support this syntax.
+       */
+#define WS_DLL_PUBLIC_NOEXTERN __declspec(dllimport)
     #else /* ! __GNUC__  && ENABLE_STATIC */
-#define WS_DLL_PUBLIC
+      /*
+       * Presumably MSVC, and we're building all-static, so we're
+       * not building any DLLs.
+       */
+#define WS_DLL_PUBLIC_NOEXTERN
     #endif /* __GNUC__ */
   #endif /* WS_BUILD_DLL */
-  #define WS_DLL_PUBLIC_NOEXTERN WS_DLL_PUBLIC
+
+  /*
+   * Symbols in a DLL are *not* exported unless they're specifically
+   * flagged as exported, so, for a non-static but non-exported
+   * symbol, we don't have to do anything.
+   */
   #define WS_DLL_LOCAL
-#else
+#else /* defined _WIN32 || defined __CYGWIN__ */
+  /*
+   * Compiling for UN*X, where the dllimport and dllexport stuff
+   * is neither necessary nor supported; just specify the
+   * visibility if we have a compiler that claims compatibility
+   * with GCC 4 or later.
+   */
   #if __GNUC__ >= 4
-#define WS_DLL_PUBLIC __attribute__ ((visibility ("default"))) extern
+    /*
+     * Symbols exported from libraries.
+     */
 #define WS_DLL_PUBLIC_NOEXTERN __attribute__ ((visibility ("default")))
+
+    /*
+     * Non-static symbols *not* exported from libraries.
+     */
 #define WS_DLL_LOCAL  __attribute__ ((visibility ("hidden")))
   #else /* ! __GNUC__ >= 4 */
-    #define WS_DLL_PUBLIC
+    /*
+     * We have no way to control visibility.
+     */
     #define WS_DLL_PUBLIC_NOEXTERN
-    #define WS_DLL_LOCAL extern
+    #define WS_DLL_LOCAL
   #endif /* __GNUC__ >= 4 */
 #endif
 
+/*
+ * You *must* use this for exported data *declarations*; if you use
+ * WS_DLL_PUBLIC_NOEXTERN, some compilers, such as MSVC++, will complain
+ * about array definitions with no size.
+ *
+ * You must *not* use this for exported data *definitions*, as that
+ * will, for some compilers, cause warnings about items being initialized
+ * and declared extern.
+ *
+ * Either can be used for exported *function* declarations and definitions.
+ */
+#define WS_DLL_PUBLIC  WS_DLL_PUBLIC_NOEXTERN extern
+
 #endif /* SYMBOL_EXPORT_H */

Property changes on: .
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /trunk:r50329,50332,50334,50379,50382

___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev@wireshark.org>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe

Reply via email to