[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

umask vs umask

Daniel Berger

4/13/2008 12:15:00 PM

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

8 Answers

Phillip Gawlowski

4/13/2008 12:28:00 PM

0

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Daniel Berger 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/...

- --
Phillip Gawlowski
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....

iEYEARECAAYFAkgB/EcACgkQbtAgaoJTgL+FuwCdFHjOCHW5Hh/eVRmRRrDyOfeg
OKoAn0ZEwn8LCCTT2ADhbF33a3ex4TZ3
=p/Sk
-----END PGP SIGNATURE-----

Daniel Berger

4/14/2008 3:29:00 AM

0



On Apr 13, 7:43=A0am, "Park Heesob" <phasi...@hotmail.com> wrote:
> Hi,
>
>
>
> ----- Original Message -----
> From: "Daniel Berger" <djber...@gmail.com>
> To: "ruby-talk ML" <ruby-t...@ruby-lang.org>
> Sent: Sunday, April 13, 2008 9:15 PM
> Subject: umask vs umask
>
> > 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 =3D 0000200
> > S_IREAD =A0=3D 0000400
>
> > Umask =3D API.new('_umask', 'I', 'I', 'msvcrt')
>
> > # Mimic file.c
> > def umask(*args)
> > =A0 =A0omask =3D 0
>
> > =A0 =A0if args.length =3D=3D 0
> > =A0 =A0 =A0 omask =3D Umask.call(0)
> > =A0 =A0 =A0 Umask.call(omask)
> > =A0 =A0elsif args.length =3D=3D 1
> > =A0 =A0 =A0 omask =3D Umask.call(args[0])
> > =A0 =A0else
> > =A0 =A0 =A0 raise ArgumentError, "wrong number of arguments"
> > =A0 =A0end
>
> > =A0 =A0return omask
> > end
>
> > p umask(S_IREAD) # 0
> > p umask =A0 =A0 =A0 =A0 =A0# 256 (ok)
> > p umask =A0 =A0 =A0 =A0 =A0# 256 (double check, ok)
>
> > p File.umask =A0 =A0 # 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 umas=
k.
>
> 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

Heesob Park

4/14/2008 5:46:00 AM

0

Hi,

Daniel Berger wrote:
> On Apr 13, 7:43�am, "Park Heesob" <phasi...@hotmail.com> 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/librar...(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-38...

Regards,

Park Heesob

--
Posted via http://www.ruby-....

Daniel Berger

4/14/2008 7:14:00 PM

0

On Apr 13, 11:45=C2=A0pm, Heesob Park <pha...@gmail.com> wrote:
> Hi,

> Daniel Berger wrote:
> > On Apr 13, 7:43=EF=BF=BDam, "Park Heesob" <phasi...@hotmail.com> wrote:
> >> > Hi,
>
> >> > =EF=BF=BD =EF=BF=BD =EF=BF=BD omask =3D Umask.call(0)
> >> > p umask(S_IREAD) # 0
> >> > p umask =EF=BF=BD =EF=BF=BD =EF=BF=BD =EF=BF=BD =EF=BF=BD# 256 (ok)
> >> > p umask =EF=BF=BD =EF=BF=BD =EF=BF=BD =EF=BF=BD =EF=BF=BD# 256 (doubl=
e check, ok)
>
> >> > p File.umask =EF=BF=BD =EF=BF=BD # 0 - wtf?
>
> >> > Why isn't Ruby's File.umask picking up the change? I see the same thi=
ng
> >> > if I set it with File.umask and try to read the changes with my own u=
mask.
>
> >> 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/librar...(VS.80).aspx
>
> You should modify the line
>
> Umask =3D API.new('_umask', 'I', 'I', 'msvcrt')
>
> to
>
> Umask =3D API.new('_umask', 'I', 'I', 'msvcr80')
>
> It requires Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)htt=
p://www.microsoft.com/downloads/details.aspx?FamilyID=3D200B2FD9-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

Daniel Berger

4/16/2008 2:26:00 AM

0



On Apr 14, 7:11 pm, Park Heesob <phasi...@hotmail.com> wrote:
> Hi,
>
> > Date: Tue, 15 Apr 2008 04:14:15 +0900> From: djber...@gmail.com> Subject=
: Re: umask vs umask> To: ruby-t...@ruby-lang.org> > On Apr 13, 11:45 pm, He=
esob Park <pha...@gmail.com> wrote:> > Hi,> > > Daniel Berger wrote:> > > On=
Apr 13, 7:43=EF=BF=BDam, "Park Heesob" <phasi...@hotmail.com> wrote:> > >> =
> Hi,> >> > >> > =EF=BF=BD =EF=BF=BD =EF=BF=BD omask =3D Umask.call(0)> > >>=
> p umask(S_IREAD) # 0> > >> > p umask =EF=BF=BD =EF=BF=BD =EF=BF=BD =EF=BF=
=BD =EF=BF=BD# 256 (ok)> > >> > p umask =EF=BF=BD =EF=BF=BD =EF=BF=BD =EF=BF=
=BD =EF=BF=BD# 256 (double check, ok)> >> > >> > p File.umask =EF=BF=BD =EF=
=BF=BD # 0 - wtf?> >> > >> > Why isn't Ruby's File.umask picking up the chan=
ge? 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 r=
uby 1.8.6 p111,> > >> the File.umask works fine.> >> > > I noticed that it w=
orks 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/librar...(VS.80).aspx> >> =
> You should modify the line> >> > Umask =3D API.new('_umask', 'I', 'I', 'ms=
vcrt')> >> > to> >> > Umask =3D API.new('_umask', 'I', 'I', 'msvcr80')> >> >=
It requires Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)http=
://www.microsoft.com/downloads/details.aspx?FamilyID=3D200B2FD9-AE1...> > Wh=
en I try to link against msvcr80 I get:> > umask_test.rb:4:in `initialize': =
LoadLibrary() function failed for> 'msvcr80': A dynamic link library (DLL) i=
nitialization 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 b=
eing used:> > cl -W3 -nologo -MD -O2b2xty- -DRUBY_EXPORT -I. -I. -I./> missi=
ng -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 mention=
ed 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 readi=
ng the first article I'm still not> sure what I'm supposed to do to make thi=
s work properly.>
>
> First copy "msvcr80.dll" and "Microsoft.VC80.CRT.manifest" to the folder w=
here ruby.exe runs.
>
> And make "ruby.exe.manifest" in the the folder where ruby.exe runs with th=
e following content:
>
> <?xml version=3D'1.0' encoding=3D'UTF-8' standalone=3D'yes'?> <assembly xm=
lns=3D'urn:schemas-microsoft-com:asm.v1' manifestVersion=3D'1.0'> <depende=
ncy> <dependentAssembly> <assemblyIdentity type=3D'win32' name=3D'=
Microsoft.VC80.CRT' version=3D'8.0.50608.0' processorArchitecture=3D'x86' pu=
blicKeyToken=3D'1fc8b3b9a1e18e3b' /> </dependentAssembly> </dependency=
> </assembly>

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

Heesob Park

4/16/2008 3:30:00 AM

0

Hi,

Daniel Berger wrote:
> On Apr 14, 7:11 pm, Park Heesob <phasi...@hotmail.com> 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'?> <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> <dependency> <dependentAssembly> <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /> </dependentAssembly> </dependency> </assembly>
>

> 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 Heesob
--
Posted via http://www.ruby-....

Daniel Berger

4/16/2008 3:54:00 AM

0



On Apr 15, 9:29 pm, Heesob Park <pha...@gmail.com> wrote:
> Hi,
>
>
>
> Daniel Berger wrote:
> > On Apr 14, 7:11 pm, Park Heesob <phasi...@hotmail.com> wrote:
> >> Hi,
>
> >> First copy "msvcr80.dll" and "Microsoft.VC80.CRT.manifest" to the folde=
r where ruby.exe runs.
>
> >> And make "ruby.exe.manifest" in the the folder where ruby.exe runs with=
the following content:
>
> >> <?xml version=3D'1.0' encoding=3D'UTF-8' standalone=3D'yes'?> <assembly=
xmlns=3D'urn:schemas-microsoft-com:asm.v1' manifestVersion=3D'1.0'> <depe=
ndency> <dependentAssembly> <assemblyIdentity type=3D'win32' name=
=3D'Microsoft.VC80.CRT' version=3D'8.0.50608.0' processorArchitecture=3D'x86=
' publicKeyToken=3D'1fc8b3b9a1e18e3b' /> </dependentAssembly> </depend=
ency> </assembly>
>
> > 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.

I checked that, as well as the public key token. Heres my
Microsoft.VC80.CRT.manifest, just in case:

<?xml version=3D"1.0" encoding=3D"UTF-8" standalone=3D"yes"?>
<!-- Copyright =A9 1981-2001 Microsoft Corporation -->
<assembly xmlns=3D"urn:schemas-microsoft-com:asm.v1"
manifestVersion=3D"1.0">
<noInheritable/>
<assemblyIdentity
type=3D"win32"
name=3D"Microsoft.VC80.CRT"
version=3D"8.0.50608.0"
processorArchitecture=3D"x86"
publicKeyToken=3D"1fc8b3b9a1e18e3b"
/>
<file name=3D"msvcr80.dll"/>
<file name=3D"msvcp80.dll"/>
<file name=3D"msvcm80.dll"/>
</assembly>

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

Heesob Park

4/16/2008 5:11:00 AM

0

Hi,

Daniel Berger wrote:
> On Apr 15, 9:29 pm, Heesob Park <pha...@gmail.com> 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"?>
> <!-- Copyright � 1981-2001 Microsoft Corporation -->
> <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
> manifestVersion="1.0">
> <noInheritable/>
> <assemblyIdentity
> type="win32"
> name="Microsoft.VC80.CRT"
> version="8.0.50608.0"
> processorArchitecture="x86"
> publicKeyToken="1fc8b3b9a1e18e3b"
> />
> <file name="msvcr80.dll"/>
> <file name="msvcp80.dll"/>
> <file name="msvcm80.dll"/>
> </assembly>
>
> 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/vcredist...
http://blogs.msdn.com/nikolad/archive/2005/09/02/4...
http://blogs.msdn.com/vcblog/archive/2007/10/12/how-to-redistribute-the-visual-c-libraries-with-your-applic...


Regards,

Park Heesob
--
Posted via http://www.ruby-....