FILE* rb_gsl_open_writefile(VALUE io, int *flag) { #ifdef RUBY_1_9_LATER rb_io_t *fptr = NULL; #else OpenFile *fptr = NULL; #endif FILE *fp = NULL; char *name; switch (TYPE(io)) { case T_STRING: name = RSTRING_PTR(io); fp = fopen(name, "w"); *flag = 1; break; case T_FILE: GetOpenFile(io, fptr); name = fptr->path; rb_io_check_writable(fptr); #ifdef RUBY_1_9_LATER fp = rb_io_stdio_file(fptr); #else fp = GetWriteFile(fptr); #endif *flag = 0; break; default: rb_raise(rb_eTypeError, "argv 1 String or File expected"); break; } if (fp == NULL) rb_raise(rb_eIOError, "Cannot open file %s.", name); return fp; }
/* * call-seq: * document.dump([stream]) -> true * * Dump this document's XML to the specified IO stream. * If no stream is specified, stdout is used. */ VALUE ruby_xml_document_dump(int argc, VALUE *argv, VALUE self) { OpenFile *fptr; VALUE io; FILE *out; ruby_xml_document_t *rxd; Data_Get_Struct(self, ruby_xml_document_t, rxd); if (rxd->doc == NULL) return(Qnil); switch (argc) { case 0: io = rb_stdout; break; case 1: io = argv[0]; if (!rb_obj_is_kind_of(io, rb_cIO)) rb_raise(rb_eTypeError, "need an IO object"); break; default: rb_raise(rb_eArgError, "wrong number of arguments (0 or 1)"); } GetOpenFile(io, fptr); rb_io_check_writable(fptr); out = GetWriteFile(fptr); xmlDocDump(out, rxd->doc); return(Qtrue); }
/* * call-seq: * document.debug_dump_head([stream]) -> true * * Debug-dump this document's header to the specified IO stream. * If no stream is specified, stdout is used. */ VALUE ruby_xml_document_debug_dump_head(int argc, VALUE *argv, VALUE self) { #ifdef LIBXML_DEBUG_ENABLED OpenFile *fptr; VALUE io; FILE *out; ruby_xml_document_t *rxd; Data_Get_Struct(self, ruby_xml_document_t, rxd); if (rxd->doc == NULL) return(Qnil); switch (argc) { case 0: io = rb_stdout; break; case 1: io = argv[0]; if (!rb_obj_is_kind_of(io, rb_cIO)) rb_raise(rb_eTypeError, "need an IO object"); break; default: rb_raise(rb_eArgError, "wrong number of arguments (0 or 1)"); } GetOpenFile(io, fptr); rb_io_check_writable(fptr); out = GetWriteFile(fptr); xmlDebugDumpDocumentHead(out, rxd->doc); return(Qtrue); #else rb_warn("libxml was compiled without debugging support. Please recompile libxml and ruby-libxml"); return(Qfalse); #endif }
static VALUE rb_gsl_ieee_fprintf_double(int argc, VALUE *argv, VALUE obj) { #ifdef RUBY_1_9_LATER rb_io_t *fptr = NULL; #else OpenFile *fptr = NULL; #endif FILE *fp = NULL; int flag = 0; VALUE vtmp; switch (argc) { case 2: switch (TYPE(argv[0])) { case T_STRING: fp = fopen(RSTRING_PTR(argv[0]), "w"); flag = 1; break; case T_FILE: GetOpenFile(argv[0], fptr); rb_io_check_writable(fptr); #ifdef RUBY_1_9_LATER fp = rb_io_stdio_file(fptr); #else fp = GetWriteFile(fptr); #endif break; default: rb_raise(rb_eTypeError, "wrong type argument %s (IO or String expected)", rb_class2name(CLASS_OF(argv[0]))); } vtmp = argv[1]; break; case 1: vtmp = argv[0]; fp = stdout; break; default: rb_raise(rb_eArgError, "wrong number of arguments (%d for 1 or 2)", argc); } if (TYPE(vtmp) != T_FLOAT) rb_raise(rb_eTypeError, "wrong argument type %s (Float expected)", rb_class2name(CLASS_OF(vtmp))); #ifdef RUBY_1_9_LATER double rbfv = rb_float_value(vtmp); gsl_ieee_fprintf_double(fp, &rbfv); #else gsl_ieee_fprintf_double(fp, &(RFLOAT(vtmp)->value)); #endif if (fp == stdout) fprintf(stdout, "\n"); if (flag == 1) fclose(fp); return obj; }