Hi,
Windows XP Home
Ruby 1.8.6 p114
I think I need another set of eyes on this one, because it looks to me
like Ruby isn’t picking up the changes I make with a custom umask, and
vice versa.
require ‘win32/api’
include Win32
S_IWRITE = 0000200
S_IREAD = 0000400
Umask = API.new(’_umask’, ‘I’, ‘I’, ‘msvcrt’)
Mimic file.c
def umask(*args)
omask = 0
if args.length == 0
omask = Umask.call(0)
Umask.call(omask)
elsif args.length == 1
omask = Umask.call(args[0])
else
raise ArgumentError, "wrong number of arguments"
end
return omask
end
p umask(S_IREAD) # 0
p umask # 256 (ok)
p umask # 256 (double check, ok)
p File.umask # 0 - wtf?
Why isn’t Ruby’s File.umask picking up the change? I see the same thing
if I set it with File.umask and try to read the changes with my own
umask.
Regards,
Dan
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Daniel B. wrote:
| Hi,
|
| Windows XP Home
| Ruby 1.8.6 p114
[snip]
| Why isn’t Ruby’s File.umask picking up the change? I see the same thing
| if I set it with File.umask and try to read the changes with my own umask.
Could that be because Windows is not a *NIX?
http://en.wikipedia.org/wiki/Umask
Phillip G.
Twitter: twitter.com/cynicalryan
~ - You know you’ve been hacking too long when…
…you can’t sleep any more, because you’re stuck in the garbage
collector and it keeps dumping with Illegal Instruction.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iEYEARECAAYFAkgB/EcACgkQbtAgaoJTgL+FuwCdFHjOCHW5Hh/eVRmRRrDyOfeg
OKoAn0ZEwn8LCCTT2ADhbF33a3ex4TZ3
=p/Sk
-----END PGP SIGNATURE-----
Hi,
----- Original Message -----
From: “Daniel B.” [email protected]
To: “ruby-talk ML” [email protected]
Sent: Sunday, April 13, 2008 9:15 PM
Subject: umask vs umask
include Win32
if args.length == 0
p umask(S_IREAD) # 0
p umask # 256 (ok)
p umask # 256 (double check, ok)
p File.umask # 0 - wtf?
Why isn’t Ruby’s File.umask picking up the change? I see the same thing
if I set it with File.umask and try to read the changes with my own umask.
In my Windows XP Home & Pro, with ruby 1.8.6 p111,
the File.umask works fine.
Regards,
Park H.
Hi,
Daniel B. wrote:
On Apr 13, 7:43�am, “Park H.” [email protected] wrote:
Hi,
� � � omask = Umask.call(0)
p umask(S_IREAD) # 0
p umask � � � � �# 256 (ok)
p umask � � � � �# 256 (double check, ok)
p File.umask � � # 0 - wtf?
Why isn’t Ruby’s File.umask picking up the change? I see the same thing
if I set it with File.umask and try to read the changes with my own umask.
In my Windows XP Home & Pro, with ruby 1.8.6 p111,
the File.umask works fine.
I noticed that it works as expected when I use the one click installer
but not when I use a Ruby built with VC++ 8.
Are you seeing the same thing?
Yes, I tested with VC++ 9.
It fails as same as your test.
I guess “msvcrt” is valid for VC++ 6.
The situation became more complex since VC++ 8.
Refer to http://msdn2.microsoft.com/en-us/library/abx4dbyh(VS.80).aspx
You should modify the line
Umask = API.new(’_umask’, ‘I’, ‘I’, ‘msvcrt’)
to
Umask = API.new(’_umask’, ‘I’, ‘I’, ‘msvcr80’)
It requires Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)
http://www.microsoft.com/downloads/details.aspx?FamilyID=200B2FD9-AE1A-4A14-984D-389C36F85647
Regards,
Park H.
On Apr 13, 7:43 am, “Park H.” [email protected] wrote:
Hi,
omask = Umask.call(0)
p umask(S_IREAD) # 0
p umask # 256 (ok)
p umask # 256 (double check, ok)
p File.umask # 0 - wtf?
Why isn’t Ruby’s File.umask picking up the change? I see the same thing
if I set it with File.umask and try to read the changes with my own umask.
In my Windows XP Home & Pro, with ruby 1.8.6 p111,
the File.umask works fine.
I noticed that it works as expected when I use the one click installer
but not when I use a Ruby built with VC++ 8.
Are you seeing the same thing?
Regards,
Dan
On Apr 13, 11:45Â pm, Heesob P. [email protected] wrote:
Hi,
to
Umask = API.new(’_umask’, ‘I’, ‘I’, ‘msvcr80’)
It requires Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)http://www.microsoft.com/downloads/details.aspx?FamilyID=200B2FD9-AE1…
When I try to link against msvcr80 I get:
umask_test.rb:4:in initialize': LoadLibrary() function failed for 'msvcr80': A dynamic link library (DLL) initialization routine failed. (Win32::API::Error) from umask_test.rb:4:in
new’
from umask_test.rb:4
The first line of a build shows the options being used:
cl -W3 -nologo -MD -O2b2xty- -DRUBY_EXPORT -I. -I. -I./
missing -D_CRT_SECURE_NO
_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -c -Tcarray.c
Do I need to use a different build switch?
The download link you mentioned suggests that I only need that patch
if I don’t already have Visual C++ installed. But, I do have it
installed.
I’m afraid that even after reading the first article I’m still not
sure what I’m supposed to do to make this work properly.
Regards,
Dan
Hi,
Date: Tue, 15 Apr 2008 04:14:15 +0900> From: [email protected]> Subject: Re: umask vs umask> To: [email protected]> > On Apr 13, 11:45 pm, Heesob P. [email protected] wrote:> > Hi,> > > Daniel B. wrote:> > > On Apr 13, 7:43�am, “Park H.” [email protected] wrote:> > >> > Hi,> >> > >> > � � � omask = Umask.call(0)> > >> > p umask(S_IREAD) # 0> > >> > p umask � � � � �# 256 (ok)> > >> > p umask � � � � �# 256 (double check, ok)> >> > >> > p File.umask � � # 0 - wtf?> >> > >> > Why isn’t Ruby’s File.umask picking up the change? I see the same thing> > >> > if I set it with File.umask and try to read the changes with my own umask.> >> > >> In my Windows XP Home & Pro, with ruby 1.8.6 p111,> > >> the File.umask works fine.> >> > > I noticed that it works as expected when I use the one click installer> > > but not when I use a Ruby built with VC++ 8.> >> > > Are you seeing the same thing?> >> > Yes, I tested with VC++ 9.> > It fails as same as your test.> > I guess “msvcrt” is valid for VC++ 6.> > The situation became more complex since VC++ 8.> >> > Refer tohttp://msdn2.microsoft.com/en-us/library/abx4dbyh(VS.80).aspx> >> > You should modify the line> >> > Umask = API.new(’_umask’, ‘I’, ‘I’, ‘msvcrt’)> >> > to> >> > Umask = API.new(’_umask’, ‘I’, ‘I’, ‘msvcr80’)> >> > It requires Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)http://www.microsoft.com/downloads/details.aspx?FamilyID=200B2FD9-AE1…> > When I try to link against msvcr80 I get:> > umask_test.rb:4:in initialize': LoadLibrary() function failed for> 'msvcr80': A dynamic link library (DLL) initialization routine failed.> (Win32::API::Error)> from umask_test.rb:4:in
new’> from umask_test.rb:4> > The first line of a build shows the options being used:> > cl -W3 -nologo -MD -O2b2xty- -DRUBY_EXPORT -I. -I. -I./> missing -D_CRT_SECURE_NO> _DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -c -Tcarray.c> > Do I need to use a different build switch?> > The download link you mentioned suggests that I only need that patch> if I don’t already have Visual C++ installed. But, I do have it> installed.> > I’m afraid that even after reading the first article I’m still not> sure what I’m supposed to do to make this work properly.>
First copy “msvcr80.dll” and “Microsoft.VC80.CRT.manifest” to the folder
where ruby.exe runs.
And make “ruby.exe.manifest” in the the folder where ruby.exe runs with
the following content:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?> <assembly
xmlns=‘urn:schemas-microsoft-com:asm.v1’ manifestVersion=‘1.0’>
Although there may be an easy way, this will work for you.
Regards,
Park H.
Explore the seven wonders of the world
http://search.msn.com/results.aspx?q=7+wonders+world&mkt=en-US&form=QBRE
Hi,
Daniel B. wrote:
On Apr 14, 7:11 pm, Park H. [email protected] wrote:
Hi,
First copy “msvcr80.dll” and “Microsoft.VC80.CRT.manifest” to the folder where ruby.exe runs.
And make “ruby.exe.manifest” in the the folder where ruby.exe runs with the following content:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
I gave this a shot, copying msvcr80.dll and
Microsoft.VC80.CRT.manifest from C:\Program Files\Microsoft Visual
Studio 8\VC\redist\x86\Microsoft.VC80.CRT into my CONFIG[‘bindir’]
directory, and created the ruby.exe.manifest as you suggested.
Unfortunately, that still didn’t work for me. I also just tried
copying the Microsoft.VC80.CRT.manifest to ruby.exe.manifest, but that
didn’t work either.
I’m not really sure where to go from here.
The version # ‘8.0.50608.0’ in the ruby.exe.manifest must be same to the
verision # in your Microsoft.VC80.CRT.manifest file.
Regards,
Park H.
On Apr 14, 7:11 pm, Park H. [email protected] wrote:
Hi,
Date: Tue, 15 Apr 2008 04:14:15 +0900> From: [email protected]> Subject: Re: umask vs umask> To: [email protected]> > On Apr 13, 11:45 pm, Heesob P. [email protected] wrote:> > Hi,> > > Daniel B. wrote:> > > On Apr 13, 7:43�am, “Park H.” [email protected] wrote:> > >> > Hi,> >> > >> > � � � omask = Umask.call(0)> > >> > p umask(S_IREAD) # 0> > >> > p umask � � � � �# 256 (ok)> > >> > p umask � � � � �# 256 (double check, ok)> >> > >> > p File.umask � � # 0 - wtf?> >> > >> > Why isn’t Ruby’s File.umask picking up the change? I see the same thing> > >> > if I set it with File.umask and try to read the changes with my own umask.> >> > >> In my Windows XP Home & Pro, with ruby 1.8.6 p111,> > >> the File.umask works fine.> >> > > I noticed that it works as expected when I use the one click installer> > > but not when I use a Ruby built with VC++ 8.> >> > > Are you seeing the same thing?> >> > Yes, I tested with VC++ 9.> > It fails as same as your test.> > I guess “msvcrt” is valid for VC++ 6.> > The situation became more complex since VC++ 8.> >> > Refer tohttp://msdn2.microsoft.com/en-us/library/abx4dbyh(VS.80).aspx> >> > You should modify the line> >> > Umask = API.new(’_umask’, ‘I’, ‘I’, ‘msvcrt’)> >> > to> >> > Umask = API.new(’_umask’, ‘I’, ‘I’, ‘msvcr80’)> >> > It requires Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)http://www.microsoft.com/downloads/details.aspx?FamilyID=200B2FD9-AE1…> > When I try to link against msvcr80 I get:> > umask_test.rb:4:in initialize': LoadLibrary() function failed for> 'msvcr80': A dynamic link library (DLL) initialization routine failed.> (Win32::API::Error)> from umask_test.rb:4:in
new’> from umask_test.rb:4> > The first line of a build shows the options being used:> > cl -W3 -nologo -MD -O2b2xty- -DRUBY_EXPORT -I. -I. -I./> missing -D_CRT_SECURE_NO> _DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -c -Tcarray.c> > Do I need to use a different build switch?> > The download link you mentioned suggests that I only need that patch> if I don’t already have Visual C++ installed. But, I do have it> installed.> > I’m afraid that even after reading the first article I’m still not> sure what I’m supposed to do to make this work properly.>
First copy “msvcr80.dll” and “Microsoft.VC80.CRT.manifest” to the folder where ruby.exe runs.
And make “ruby.exe.manifest” in the the folder where ruby.exe runs with the following content:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
I gave this a shot, copying msvcr80.dll and
Microsoft.VC80.CRT.manifest from C:\Program Files\Microsoft Visual
Studio 8\VC\redist\x86\Microsoft.VC80.CRT into my CONFIG[‘bindir’]
directory, and created the ruby.exe.manifest as you suggested.
Unfortunately, that still didn’t work for me. I also just tried
copying the Microsoft.VC80.CRT.manifest to ruby.exe.manifest, but that
didn’t work either.
I’m not really sure where to go from here.
Regards,
Dan
Hi,
Daniel B. wrote:
On Apr 15, 9:29 pm, Heesob P. [email protected] wrote:
And make “ruby.exe.manifest” in the the folder where ruby.exe runs with the following content:
didn’t work either.
I’m not really sure where to go from here.
The version # ‘8.0.50608.0’ in the ruby.exe.manifest must be same to the
verision # in your Microsoft.VC80.CRT.manifest file.
I checked that, as well as the public key token. Heres my
Microsoft.VC80.CRT.manifest, just in case:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
I’m not sure what the problem is. But, a more pressing issue is how
the build scripts should be altered so that either this happens
automatically, or so that it’s not necessary (if possible).
As I tested with msvcr90.dll on VC++ 9.0 compiled ruby,
I cannot confirm your problem.
Try google for msvcr80.dll problem .
Here is some links:
http://www.codeproject.com/KB/cpp/vcredists_x86.aspx
http://blogs.msdn.com/nikolad/archive/2005/09/02/460368.aspx
http://blogs.msdn.com/vcblog/archive/2007/10/12/how-to-redistribute-the-visual-c-libraries-with-your-application.aspx
Regards,
Park H.
On Apr 15, 9:29 pm, Heesob P. [email protected] wrote:
And make “ruby.exe.manifest” in the the folder where ruby.exe runs with the following content:
didn’t work either.
I’m not really sure where to go from here.
The version # ‘8.0.50608.0’ in the ruby.exe.manifest must be same to the
verision # in your Microsoft.VC80.CRT.manifest file.
I checked that, as well as the public key token. Heres my
Microsoft.VC80.CRT.manifest, just in case:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
I’m not sure what the problem is. But, a more pressing issue is how
the build scripts should be altered so that either this happens
automatically, or so that it’s not necessary (if possible).
Regards,
Dan