[Guile] New typemaps for FILE *.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@875 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
5f17119bd1
commit
b53f74cb5f
3 changed files with 58 additions and 1 deletions
|
|
@ -61,6 +61,14 @@ GSWIG_scm2char (SCM s)
|
|||
scm_wrong_type_arg(NULL, 0, s);
|
||||
}
|
||||
|
||||
/* More 1.3.4 compatibility */
|
||||
#ifndef SCM_INPUT_PORT_P
|
||||
# define SCM_INPUT_PORT_P SCM_INPORTP
|
||||
# define SCM_OUTPUT_PORT_P SCM_OUTPORTP
|
||||
#endif
|
||||
|
||||
/* Type system */
|
||||
|
||||
typedef struct SwigPtrType SwigPtrType;
|
||||
|
||||
typedef struct swig_type_info {
|
||||
|
|
|
|||
44
Lib/guile/ports.i
Normal file
44
Lib/guile/ports.i
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
/* ports.i --- Guile typemaps for handling ports -*- c -*-
|
||||
Copyright (C) 2000 Matthias Koeppe <mkoeppe@mail.math.uni-magdeburg.de>
|
||||
|
||||
$Header$
|
||||
*/
|
||||
|
||||
%{
|
||||
#ifndef _POSIX_SOURCE
|
||||
/* This is needed on Solaris for fdopen(). */
|
||||
# define _POSIX_SOURCE=199506L
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
%}
|
||||
|
||||
/* Feed FILE * arguments from file ports */
|
||||
|
||||
%typemap(guile, in) FILE *
|
||||
{
|
||||
if(!(SCM_FPORTP($source)))
|
||||
scm_wrong_type_arg("$name", $argnum, $source);
|
||||
else {
|
||||
int fd;
|
||||
if (SCM_OUTPUT_PORT_P($source))
|
||||
scm_force_output($source);
|
||||
fd=dup(SCM_FPORT_FDES($source));
|
||||
if(fd==-1)
|
||||
scm_misc_error("$name", strerror(errno), SCM_EOL);
|
||||
$target=fdopen(fd,
|
||||
SCM_OUTPUT_PORT_P($source)
|
||||
? (SCM_INPUT_PORT_P($source)
|
||||
? "rw" : "w")
|
||||
: "r");
|
||||
if($target==NULL)
|
||||
scm_misc_error("$name", strerror(errno), SCM_EOL);
|
||||
}
|
||||
}
|
||||
|
||||
%typemap(guile, indoc) FILE * "($arg <port>)";
|
||||
|
||||
%typemap(guile, freearg) FILE* {
|
||||
fclose($target);
|
||||
}
|
||||
|
||||
|
|
@ -3,7 +3,12 @@
|
|||
|
||||
$Header$ */
|
||||
|
||||
/* Basic types */
|
||||
/* Unlike other SWIG language modules, the Guile module handles all
|
||||
non-pointer types uniformly via typemaps. Here are the
|
||||
definitions.
|
||||
|
||||
The SIMPLE_MAP macro below defines the whole set of typemaps needed
|
||||
for simple types. */
|
||||
|
||||
%define SIMPLE_MAP(C_NAME, SCM_TO_C, C_TO_SCM, SCM_NAME)
|
||||
%typemap (guile, in) C_NAME "$target = SCM_TO_C($source);";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue