[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:
Matthias Köppe 2000-09-21 21:06:17 +00:00
commit b53f74cb5f
3 changed files with 58 additions and 1 deletions

44
Lib/guile/ports.i Normal file
View 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);
}