List Info

Thread: In a c++ program, when I call "fclose()", or "ofstream::close()" in a file that includes ruby.h, the




In a c++ program, when I call "fclose()", or "ofstream::close()" in a file that includes ruby.h, the
user name
2006-11-20 14:35:56
Bugs item #6788, was opened at 2006-11-20 16:35
You can respond by visiting: 
http://rubyforge.org/tracke
r/?func=detail&atid=1698&aid=6788&group_id=426

Category: Core
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/tracke
r/?func=detail&atid=1698&aid=6788&group_id=426

In a c++ program, when I call "fclose()", or "ofstream::close()" in a file that includes ruby.h, the
user name
2006-11-20 14:49:57
On 11/20/06, noreplyrubyforge.org <noreplyrubyforge.org> wrote:
> Bugs item #6788, was opened at 2006-11-20 16:35
> You can respond by visiting:
> http://rubyforge.org/tracke
r/?func=detail&atid=1698&aid=6788&group_id=426
>
> Category: Core
> 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

I've had a similar problem recently, when compiling a C++
extension
with vs2005 and 1.8.5 libs, this time I had a
Warning 4003: not enough actual parameters for macro 'write'
and
Warning 4003: not enough actual parameters for macro 'read'

in ostream and istream respectively ('write' is an argument
to some STL method)

I got around this with #undef write and #undef read just
before
#Include <ostream> or whatever the main included file
was. I don't
call 'write' and 'read' in my code anyway, and none of the
header
mentions them either. So far it seems to work, although I
don't feel
really safe 

My problem didn't happen in 1.8.4 as those macros were
enclosed within
#ifdef __BORLANDC__ (although this is not the case with
close and
fclose).

[1-2]

about | contact  Other archives ( Real Estate discussion Medical topics )