Merge pull request #1398 from swig-fortran/missing-includes

Add missing includes to library and test cases
This commit is contained in:
Olly Betts 2022-02-01 14:05:17 +13:00 • committed by GitHub
commit 3e019977c5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
25 changed files with 106 additions and 50 deletions

View file

@ -5,6 +5,12 @@
* pointers as arrays.
* ----------------------------------------------------------------------------- */
#ifndef __cplusplus
// C uses free/calloc/malloc
%include "swigfragments.swg"
%fragment("<stdlib.h>");
#endif
/* -----------------------------------------------------------------------------
* %array_functions(TYPE,NAME)
*

View file

@ -4,6 +4,8 @@
* SWIG library file containing macros for manipulating raw C data as strings.
* ----------------------------------------------------------------------------- */
%include <swigfragments.swg>
%{
typedef struct SWIGCDATA {
char *data;
@ -60,7 +62,7 @@ static jbyteArray SWIG_JavaArrayOutCDATA(JNIEnv *jenv, char *result, jsize sz) {
/* -----------------------------------------------------------------------------
* %cdata(TYPE [, NAME])
* %cdata(TYPE [, NAME])
*
* Convert raw C data to a binary string.
* ----------------------------------------------------------------------------- */
@ -99,6 +101,8 @@ SWIGCDATA cdata_##NAME(TYPE *ptr, int nelements);
%cdata(void);
%fragment("<string.h>");
/* Memory move function. Due to multi-argument typemaps this appears to be wrapped as
void memmove(void *data, const char *s); */
void memmove(void *data, const void *indata, int inlen);

View file

@ -5,6 +5,12 @@
* pointer objects.
* ----------------------------------------------------------------------------- */
#ifndef __cplusplus
// C uses free/calloc/malloc
%include "swigfragments.swg"
%fragment("<stdlib.h>");
#endif
/* -----------------------------------------------------------------------------
* %pointer_class(type,name)
*

View file

@ -453,7 +453,7 @@ namespace std {
/* Default typemap for handling char * members */
#ifdef __cplusplus
%typemap(memberin) char * {
%typemap(memberin,fragment="<string.h>") char * {
delete [] $1;
if ($input) {
$1 = ($1_type) (new char[strlen((const char *)$input)+1]);
@ -462,7 +462,7 @@ namespace std {
$1 = 0;
}
}
%typemap(memberin,warning=SWIGWARN_TYPEMAP_CHARLEAK_MSG) const char * {
%typemap(memberin,warning=SWIGWARN_TYPEMAP_CHARLEAK_MSG,fragment="<string.h>") const char * {
if ($input) {
$1 = ($1_type) (new char[strlen((const char *)$input)+1]);
strcpy((char *)$1, (const char *)$input);
@ -470,7 +470,7 @@ namespace std {
$1 = 0;
}
}
%typemap(globalin) char * {
%typemap(globalin,fragment="<string.h>") char * {
delete [] $1;
if ($input) {
$1 = ($1_type) (new char[strlen((const char *)$input)+1]);
@ -479,7 +479,7 @@ namespace std {
$1 = 0;
}
}
%typemap(globalin,warning=SWIGWARN_TYPEMAP_CHARLEAK_MSG) const char * {
%typemap(globalin,warning=SWIGWARN_TYPEMAP_CHARLEAK_MSG,fragment="<string.h>") const char * {
if ($input) {
$1 = ($1_type) (new char[strlen((const char *)$input)+1]);
strcpy((char *)$1, (const char *)$input);
@ -488,7 +488,7 @@ namespace std {
}
}
#else
%typemap(memberin) char * {
%typemap(memberin,fragment="<string.h>") char * {
free($1);
if ($input) {
$1 = ($1_type) malloc(strlen((const char *)$input)+1);
@ -497,7 +497,7 @@ namespace std {
$1 = 0;
}
}
%typemap(memberin,warning=SWIGWARN_TYPEMAP_CHARLEAK_MSG) const char * {
%typemap(memberin,warning=SWIGWARN_TYPEMAP_CHARLEAK_MSG,fragment="<string.h>") const char * {
if ($input) {
$1 = ($1_type) malloc(strlen((const char *)$input)+1);
strcpy((char *)$1, (const char *)$input);
@ -505,7 +505,7 @@ namespace std {
$1 = 0;
}
}
%typemap(globalin) char * {
%typemap(globalin,fragment="<string.h>") char * {
free($1);
if ($input) {
$1 = ($1_type) malloc(strlen((const char *)$input)+1);
@ -514,7 +514,7 @@ namespace std {
$1 = 0;
}
}
%typemap(globalin,warning=SWIGWARN_TYPEMAP_CHARLEAK_MSG) const char * {
%typemap(globalin,warning=SWIGWARN_TYPEMAP_CHARLEAK_MSG,fragment="<string.h>") const char * {
if ($input) {
$1 = ($1_type) malloc(strlen((const char *)$input)+1);
strcpy((char *)$1, (const char *)$input);
@ -527,7 +527,7 @@ namespace std {
/* Character array handling */
%typemap(memberin) char [ANY] {
%typemap(memberin,fragment="<string.h>") char [ANY] {
if($input) {
strncpy((char*)$1, (const char *)$input, $1_dim0-1);
$1[$1_dim0-1] = 0;
@ -536,7 +536,7 @@ namespace std {
}
}
%typemap(globalin) char [ANY] {
%typemap(globalin,fragment="<string.h>") char [ANY] {
if($input) {
strncpy((char*)$1, (const char *)$input, $1_dim0-1);
$1[$1_dim0-1] = 0;
@ -545,25 +545,25 @@ namespace std {
}
}
%typemap(memberin) char [] {
%typemap(memberin,fragment="<string.h>") char [] {
if ($input) strcpy((char *)$1, (const char *)$input);
else $1[0] = 0;
}
%typemap(globalin) char [] {
%typemap(globalin,fragment="<string.h>") char [] {
if ($input) strcpy((char *)$1, (const char *)$input);
else $1[0] = 0;
}
/* memberin/globalin typemap for arrays. */
%typemap(memberin) SWIGTYPE [ANY] {
%typemap(memberin,fragment="<string.h>") SWIGTYPE [ANY] {
size_t ii;
$1_basetype *b = ($1_basetype *) $1;
for (ii = 0; ii < (size_t)$1_size; ii++) b[ii] = *(($1_basetype *) $input + ii);
}
%typemap(globalin) SWIGTYPE [ANY] {
%typemap(globalin,fragment="<string.h>") SWIGTYPE [ANY] {
size_t ii;
$1_basetype *b = ($1_basetype *) $1;
for (ii = 0; ii < (size_t)$1_size; ii++) b[ii] = *(($1_basetype *) $input + ii);
@ -571,7 +571,7 @@ namespace std {
/* memberin/globalin typemap for double arrays. */
%typemap(memberin) SWIGTYPE [ANY][ANY] {
%typemap(memberin,fragment="<string.h>") SWIGTYPE [ANY][ANY] {
$basetype (*inp)[$1_dim1] = ($basetype (*)[$1_dim1])($input);
$basetype (*dest)[$1_dim1] = ($basetype (*)[$1_dim1])($1);
size_t ii = 0;
@ -583,7 +583,7 @@ namespace std {
}
}
%typemap(globalin) SWIGTYPE [ANY][ANY] {
%typemap(globalin,fragment="<string.h>") SWIGTYPE [ANY][ANY] {
$basetype (*inp)[$1_dim1] = ($basetype (*)[$1_dim1])($input);
$basetype (*dest)[$1_dim1] = ($basetype (*)[$1_dim1])($1);
size_t ii = 0;

View file

@ -29,6 +29,10 @@
#include <math.h>
%}
%fragment("<string.h>", "header") %{
#include <string.h>
%}
%fragment("<stddef.h>", "header") %{
#include <stddef.h>
%}