Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / v8plus / share / swig / 1.3.26 / guile / ports.i
CommitLineData
920dae64
AT
1/* ports.i --- Guile typemaps for handling ports -*- c -*-
2 Copyright (C) 2000, 2004 Matthias Koeppe <mkoeppe@mail.math.uni-magdeburg.de>
3
4 $Header: /cvsroot/swig/SWIG/Lib/guile/ports.i,v 1.5 2004/04/26 14:09:02 mkoeppe Exp $
5*/
6
7%{
8 #ifndef _POSIX_SOURCE
9 /* This is needed on Solaris for fdopen(). */
10 # define _POSIX_SOURCE 199506L
11 #endif
12 #include <stdio.h>
13 #include <errno.h>
14 #include <unistd.h>
15%}
16
17/* This typemap for FILE * accepts
18 (1) FILE * pointer objects,
19 (2) Scheme file ports. In this case, it creates a temporary C stream
20 which reads or writes from a dup'ed file descriptor.
21 */
22
23%typemap(in, doc="$NAME is a file port or a FILE * pointer") FILE *
24 ( int closep )
25{
26 if (SWIG_ConvertPtr($input, (void**) &($1), $1_descriptor, 0) == 0) {
27 closep = 0;
28 }
29 else if(!(SCM_FPORTP($input)))
30 scm_wrong_type_arg("$name", $argnum, $input);
31 else {
32 int fd;
33 if (SCM_OUTPUT_PORT_P($input))
34 scm_force_output($input);
35 fd=dup(SCM_FPORT_FDES($input));
36 if(fd==-1)
37 scm_misc_error("$name", strerror(errno), SCM_EOL);
38 $1=fdopen(fd,
39 SCM_OUTPUT_PORT_P($input)
40 ? (SCM_INPUT_PORT_P($input)
41 ? "r+" : "w")
42 : "r");
43 if($1==NULL)
44 scm_misc_error("$name", strerror(errno), SCM_EOL);
45 closep = 1;
46 }
47}
48
49%typemap(freearg) FILE* {
50 if (closep$argnum)
51 fclose($1);
52}
53