# define _IOB_ENTRIES 20
# endif
/* Safety net to catch purely internal BIO_set_fp calls */
-# if defined(_MSC_VER) && _MSC_VER>=1900
+# if (defined(_MSC_VER) && _MSC_VER>=1900) || defined(__BORLANDC__)
if (ptr == stdin || ptr == stdout || ptr == stderr)
BIO_clear_flags(b, BIO_FLAGS_UPLINK_INTERNAL);
# elif defined(_IOB_ENTRIES)
table[index] = func;
}
-#if defined(_MSC_VER) && defined(_M_IX86)
-# define LAZY(i) \
+#if (defined(_MSC_VER) || defined(__BORLANDC__)) && defined(_M_IX86)
+# if defined(_MSC_VER)
+# define LAZY(i) \
__declspec(naked) static void lazy##i (void) { \
_asm push i \
_asm push OFFSET OPENSSL_UplinkTable \
_asm call OPENSSL_Uplink \
_asm add esp,8 \
_asm jmp OPENSSL_UplinkTable+4*i }
+# elif defined(__BORLANDC__) && defined(__clang__)
+void *OPENSSL_UplinkTable[26]; /* C++Builder requires declaration before use */
+# define LAZY(i) \
+__declspec(naked) static void lazy##i (void) { \
+ __asm__("pushl $" #i "; " \
+ "pushl %0; " \
+ "call %P1; " \
+ "addl $8, %%esp; " \
+ "jmp *%2 " \
+ : /* no outputs */ \
+ : "i" (OPENSSL_UplinkTable), \
+ "i" (OPENSSL_Uplink), \
+ "m" (OPENSSL_UplinkTable[i])); }
+# endif
# if APPLINK_MAX>25
# error "Add more stubs..."