]> git.saurik.com Git - wxWidgets.git/commitdiff
fixes for METHODDEF definition
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 6 Feb 2002 14:40:34 +0000 (14:40 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 6 Feb 2002 14:40:34 +0000 (14:40 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14032 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/imagjpeg.cpp
src/jpeg/jmorecfg.h

index c8db0ce961e5de0b47e144aac8027fad9f41f511..23c5e7aa366ea3c8b5f0e3df15c90b4834e6f772 100644 (file)
@@ -53,15 +53,26 @@ extern "C"
 #include <setjmp.h>
 
 #ifdef __SALFORDC__
-#ifdef FAR
 #undef FAR
 #endif
-#endif
 
-// we can't use METHODDEF here as it includes static yet the functions must be
-// extern "C" and these can't be used together!
-#undef METHODDEF
-#define METHODDEF(type) extern "C" type wxC_CALLING_CONV
+// ----------------------------------------------------------------------------
+// types
+// ----------------------------------------------------------------------------
+
+// the standard definition of METHODDEF(type) from jmorecfg.h is "static type"
+// which means that we can't declare the method functions as extern "C" - the
+// compiler (rightfully) complains about the multiple storage classes in
+// declaration
+//
+// so we only add extern "C" when using our own, modified, jmorecfg.h - and use
+// whatever we have in the system headers if this is what we use hoping that it
+// should be ok (can't do anything else)
+#ifdef JPEG_METHOD_LINKAGE
+    #define CPP_METHODDEF(type) extern "C" METHODDEF(type)
+#else // not using our jmorecfg.h header
+    #define CPP_METHODDEF(type) METHODDEF(type)
+#endif
 
 //-----------------------------------------------------------------------------
 // wxJPEGHandler
@@ -84,11 +95,11 @@ typedef struct {
 
 typedef my_source_mgr * my_src_ptr;
 
-METHODDEF(void) my_init_source ( j_decompress_ptr WXUNUSED(cinfo) )
+CPP_METHODDEF(void) my_init_source ( j_decompress_ptr WXUNUSED(cinfo) )
 {
 }
 
-METHODDEF(boolean) my_fill_input_buffer ( j_decompress_ptr cinfo )
+CPP_METHODDEF(boolean) my_fill_input_buffer ( j_decompress_ptr cinfo )
 {
     my_src_ptr src = (my_src_ptr) cinfo->src;
 
@@ -105,7 +116,7 @@ METHODDEF(boolean) my_fill_input_buffer ( j_decompress_ptr cinfo )
     return TRUE;
 }
 
-METHODDEF(void) my_skip_input_data ( j_decompress_ptr cinfo, long num_bytes )
+CPP_METHODDEF(void) my_skip_input_data ( j_decompress_ptr cinfo, long num_bytes )
 {
     if (num_bytes > 0)
     {
@@ -121,7 +132,7 @@ METHODDEF(void) my_skip_input_data ( j_decompress_ptr cinfo, long num_bytes )
     }
 }
 
-METHODDEF(void) my_term_source ( j_decompress_ptr cinfo )
+CPP_METHODDEF(void) my_term_source ( j_decompress_ptr cinfo )
 {
     my_src_ptr src = (my_src_ptr) cinfo->src;
 
@@ -145,7 +156,7 @@ typedef struct my_error_mgr * my_error_ptr;
  * Here's the routine that will replace the standard error_exit method:
  */
 
-METHODDEF(void) my_error_exit (j_common_ptr cinfo)
+CPP_METHODDEF(void) my_error_exit (j_common_ptr cinfo)
 {
   /* cinfo->err really points to a my_error_mgr struct, so coerce pointer */
   my_error_ptr myerr = (my_error_ptr) cinfo->err;
@@ -254,7 +265,7 @@ typedef my_destination_mgr * my_dest_ptr;
 
 #define OUTPUT_BUF_SIZE  4096    /* choose an efficiently fwrite'able size */
 
-METHODDEF(void) init_destination (j_compress_ptr cinfo)
+CPP_METHODDEF(void) init_destination (j_compress_ptr cinfo)
 {
     my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
 
@@ -266,7 +277,7 @@ METHODDEF(void) init_destination (j_compress_ptr cinfo)
     dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
 }
 
-METHODDEF(boolean) empty_output_buffer (j_compress_ptr cinfo)
+CPP_METHODDEF(boolean) empty_output_buffer (j_compress_ptr cinfo)
 {
     my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
 
@@ -276,7 +287,7 @@ METHODDEF(boolean) empty_output_buffer (j_compress_ptr cinfo)
     return TRUE;
 }
 
-METHODDEF(void) term_destination (j_compress_ptr cinfo)
+CPP_METHODDEF(void) term_destination (j_compress_ptr cinfo)
 {
     my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
     size_t datacount = OUTPUT_BUF_SIZE - dest->pub.free_in_buffer;
index bc9e62b659911e6f47b2e5113b0e8a23493a38b3..29b33d02354c16dcffac024fd5aa491a75dd400d 100644 (file)
@@ -208,25 +208,29 @@ typedef unsigned int JDIMENSION;
  * or code profilers that require it.
  */
 
-#if defined(__VISAGECPP__) /* need this for /common/imagjpeg.obj but not loclly */
-/* a function called through method pointers: */
-#define METHODDEF(type)                static type _Optlink
-/* a function used only in its module: */
-#define LOCAL(type)            static type _Optlink
-/* a function referenced thru EXTERNs: */
-#define GLOBAL(type)           type
-/* a reference to a GLOBAL function: */
-#define EXTERN(type)           extern type _Optlink
-#else
+#if defined(__VISAGECPP__)
+#define JPEG_CALLING_CONV _Optlink
+#else /* !Visual Age C++ */
+#define JPEG_CALLING_CONV
+#endif
+
+/* We can't declare a static function as extern "C" as we need to do in C++
+ * programs, so suppress static in METHODDEF when using C++.
+ */
+#if defined(__cplusplus)
+#define JPEG_METHOD_LINKAGE
+#else /* !__cplusplus */
+#define JPEG_METHOD_LINKAGE static
+#endif
+
 /* a function called through method pointers: */
-#define METHODDEF(type)                static type
+#define METHODDEF(type)                JPEG_METHOD_LINKAGE type JPEG_CALLING_CONV
 /* a function used only in its module: */
-#define LOCAL(type)            static type
+#define LOCAL(type)            static type JPEG_CALLING_CONV
 /* a function referenced thru EXTERNs: */
 #define GLOBAL(type)           type
 /* a reference to a GLOBAL function: */
-#define EXTERN(type)           extern type
-#endif
+#define EXTERN(type)           extern type JPEG_CALLING_CONV
 
 /* This macro is used to declare a "method", that is, a function pointer.
  * We want to supply prototype parameters if the compiler can cope.