#if defined(WIN32) && defined (_MSC_VER)
#define LIBTEST_API __declspec(dllexport)
#elif defined(__GNUC__)
-#define LIBTEST_API __attribute__ ((visibility ("default")))
+#define LIBTEST_API __attribute__ ((__visibility__ ("default")))
#else
#define LIBTEST_API
#endif
if (strcmp (s, "ABCD") != 0)
return 1;
- strncpy(s, m, n);
+ memcpy(s, m, n);
s [n] = '\0';
return 0;
}
{
const char m[] = "This is my message. Isn't it nice?";
- strncpy(s, m, n);
+ memcpy(s, m, n);
s [n] = '\0';
return 0;
}
int (STDCALL *DoubleIn)(MonoComObject* pUnk, double a);
int (STDCALL *ITestIn)(MonoComObject* pUnk, MonoComObject* pUnk2);
int (STDCALL *ITestOut)(MonoComObject* pUnk, MonoComObject* *ppUnk);
+ int (STDCALL *Return22NoICall)(MonoComObject* pUnk);
} MonoIUnknown;
struct MonoComObject
return S_OK;
}
+LIBTEST_API int STDCALL
+Return22NoICall(MonoComObject* pUnk)
+{
+ return 22;
+}
+
+
static void create_com_object (MonoComObject** pOut);
LIBTEST_API int STDCALL
(*pOut)->vtbl->ITestIn = ITestIn;
(*pOut)->vtbl->ITestOut = ITestOut;
(*pOut)->vtbl->get_ITest = get_ITest;
+ (*pOut)->vtbl->Return22NoICall = Return22NoICall;
}
static MonoComObject* same_object = NULL;
*/
#if defined(__GNUC__) && ((defined(__i386__) && (defined(__linux__) || defined (__APPLE__)) || defined (__FreeBSD__) || defined(__OpenBSD__)) || (defined(__ppc__) && defined(__APPLE__)))
-#define ALIGN(size) __attribute__ ((aligned(size)))
+#define ALIGN(size) __attribute__ ((__aligned__(size)))
#else
#define ALIGN(size)
#endif
return s.array [0] + s.array [1] + s.array [2];
}
+typedef struct {
+ char array [16];
+ char c;
+} FixedBufferChar;
+
+LIBTEST_API int STDCALL
+mono_test_marshal_fixed_buffer_char (FixedBufferChar *s)
+{
+ if (!(s->array [0] == 'A' && s->array [1] == 'B' && s->array [2] == 'C' && s->c == 'D'))
+ return 1;
+ s->array [0] = 'E';
+ s->array [1] = 'F';
+ s->c = 'G';
+ return 0;
+}
+
+typedef struct {
+ short array [16];
+ short c;
+} FixedBufferUnicode;
+
+LIBTEST_API int STDCALL
+mono_test_marshal_fixed_buffer_unicode (FixedBufferUnicode *s)
+{
+ if (!(s->array [0] == 'A' && s->array [1] == 'B' && s->array [2] == 'C' && s->c == 'D'))
+ return 1;
+ s->array [0] = 'E';
+ s->array [1] = 'F';
+ s->c = 'G';
+ return 0;
+}
+
const int NSTRINGS = 6;
//test strings
const char *utf8Strings[] = {
return ret;
size_t strLength = strlen(pReturn);
- ret = (char *)(malloc(sizeof(char)* (strLength + 1)));
- memset(ret, '\0', strLength + 1);
- strncpy(ret, pReturn, strLength);
+ ret = (char *)(marshal_alloc (sizeof(char)* (strLength + 1)));
+ memcpy(ret, pReturn, strLength);
+ ret [strLength] = '\0';
return ret;
}
{
char *pszTextutf8 = (char*)utf8Strings[index];
size_t strLength = strlen(pszTextutf8);
- *s = (char *)(malloc(sizeof(char)* (strLength + 1)));
+ *s = (char *)(marshal_alloc (sizeof(char)* (strLength + 1)));
memcpy(*s, pszTextutf8, strLength);
(*s)[strLength] = '\0';
}
if (*s)
{
- free(*s);
+ marshal_free (*s);
}
// overwrite the orginal
- *s = (char *)(malloc(sizeof(char)* (strLength + 1)));
+ *s = (char *)(marshal_alloc (sizeof(char)* (strLength + 1)));
memcpy(*s, pszTextutf8, strLength);
(*s)[strLength] = '\0';
}
{
char *pszTextutf8 = (char*)utf8Strings[index];
size_t strLength = strlen(pszTextutf8);
- char * ret = (char *)(malloc(sizeof(char)* (strLength + 1)));
+ char * ret = (char *)(marshal_alloc (sizeof(char)* (strLength + 1)));
memcpy(ret, pszTextutf8, strLength);
ret[strLength] = '\0';