Bugs item #6788, was opened at 2006-11-20 06:35
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=6788&group_id=426

>Category: Triage (do not select)
Group: 1.8.2
Status: Open
Resolution: None
Priority: 3
Submitted By: ozi alt (ozizus)
Assigned to: Nobody (None)
>Summary: In a c++ program, when I call "fclose()", or "ofstream::close()" in a file that includes ruby.h, the program crashes

Initial Comment:
I am embedding ruby strings to my c++ application and calling them with rb_eval_string, and I love it. 

But I noticed this problem:

When I call the C call "fclose()", or "ofstream::close()" in a file that includes ruby.h:

First the Compiler gives a varning: 

Warning 4003: not enough actual parameters for macro 'close'

But compilation finishes fine. Then on runtime, debugger catches an unhandled exception in the fstream file on this code:
...
			if (fclose(_Myfile) != 0)
				_Ans = 0;
			}
...

If I put the ruby.h inclusion and fclose() call in different files, the system still gives the warnings, but the program works fine.

I cannot seem to reproduce now, but when I was trying to find the problem I saw some warnings about  "rb_w32_fclose" of ruby API.

No, There is no problem with my code, as the problem reoccurs even with this simple program that I copy/pasted from web: remove the '#include "ruby.h"' and the program works. Else, it crashes.


/* fopen example */
#include <stdio.h>

#include "ruby.h"

int main ()
{
  FILE * pFile;
  pFile = fopen ("myfile.txt","wt");
  if (pFile!=NULL)
  {
    fputs ("fopen example",pFile);
    fclose (pFile);
  }
  return 0;
}


My system:

IDE: MSVS2005 on WinXPPro
RUBY: ruby 1.8.2 (2004-12-25) [i386-mswin32]

Good Luck


----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=6788&group_id=426