]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
windows: make sure we use the right calling convention for libc
authorDustin Howett <duhowett@microsoft.com>
Wed, 13 Oct 2021 21:16:49 +0000 (14:16 -0700)
committerDustin L. Howett <dustin@howett.net>
Sat, 20 Nov 2021 20:58:48 +0000 (14:58 -0600)
libarchive/archive_blake2_impl.h
libarchive/archive_blake2s_ref.c
libarchive/archive_blake2sp_ref.c
libarchive/archive_pack_dev.c
libarchive/archive_platform.h
libarchive/archive_write_set_format_iso9660.c

index 0f05defea36ff96ab1943b09247f8c3f81f0befe..eb8619ca7c9882ab76cf27d99b1c71672b8161eb 100644 (file)
@@ -154,7 +154,7 @@ static BLAKE2_INLINE uint64_t rotr64( const uint64_t w, const unsigned c )
 /* prevents compiler optimizing out memset() */
 static BLAKE2_INLINE void secure_zero_memory(void *v, size_t n)
 {
-  static void *(*const volatile memset_v)(void *, int, size_t) = &memset;
+  static void *(__LA_LIBC_CC *const volatile memset_v)(void *, int, size_t) = &memset;
   memset_v(v, 0, n);
 }
 
index d92ffd0fc56abcfcf019832b3256b18a290a49c9..b21a02ba68112870028b66d4aa3d61de6c972ef9 100644 (file)
@@ -17,6 +17,7 @@
 #include <string.h>
 #include <stdio.h>
 
+#include "archive_platform.h"
 #include "archive_blake2.h"
 #include "archive_blake2_impl.h"
 
index aef101084a8bde4602864d784c0e157ae635c7cf..f412c8e2a657883652821be7ef1ce02f0124c18e 100644 (file)
@@ -21,6 +21,7 @@
 #include <omp.h>
 #endif
 
+#include "archive_platform.h"
 #include "archive_blake2.h"
 #include "archive_blake2_impl.h"
 
index f8286d82183f6dd90860d5e3b52d6b2de8681c1a..d95444d979f2fad350f00ad8d79ccec8f9b2af6b 100644 (file)
@@ -77,7 +77,7 @@ static        pack_t  pack_12_20;
 static pack_t  pack_14_18;
 static pack_t  pack_8_24;
 static pack_t  pack_bsdos;
-static int     compare_format(const void *, const void *);
+static int     __LA_LIBC_CC compare_format(const void *, const void *);
 
 static const char iMajorError[] = "invalid major number";
 static const char iMinorError[] = "invalid minor number";
@@ -310,6 +310,7 @@ static const struct format {
 };
 
 static int
+__LA_LIBC_CC
 compare_format(const void *key, const void *element)
 {
        const char              *name;
index b8bcb52bc90e911beb75ad21c21ec61016c69b6a..9fef68fad8b97d0e5c6fe9029fb78b629504d14a 100644 (file)
  * either Windows or Posix APIs. */
 #if (defined(__WIN32__) || defined(_WIN32) || defined(__WIN32)) && !defined(__CYGWIN__)
 #include "archive_windows.h"
+/* The C library on Windows specifies a calling convention for callback
+ * functions and exports; when we interact with them (capture pointers,
+ * call and pass function pointers) we need to match their calling
+ * convention.
+ * This only matters when libarchive is built with /Gr, /Gz or /Gv
+ * (which change the default calling convention.) */
+#define __LA_LIBC_CC __cdecl
 #else
 #define la_stat(path,stref)            stat(path,stref)
+#define __LA_LIBC_CC
 #endif
 
 /*
index faabd28ea640b8994ca349232550109e8d7980c5..58b7216a8071bb5c392f3995e6d9064297b2b165 100644 (file)
@@ -6802,6 +6802,7 @@ isoent_rr_move(struct archive_write *a)
  * This comparing rule is according to ISO9660 Standard 6.9.1
  */
 static int
+__LA_LIBC_CC
 _compare_path_table(const void *v1, const void *v2)
 {
        const struct isoent *p1, *p2;
@@ -6844,6 +6845,7 @@ _compare_path_table(const void *v1, const void *v2)
 }
 
 static int
+__LA_LIBC_CC
 _compare_path_table_joliet(const void *v1, const void *v2)
 {
        const struct isoent *p1, *p2;