# Re: Anyone interested in	implementing	Etc	module	for Mono?

**URL:** <https://www.ruby-forum.com/t/re-anyone-interested-in-implementing-etc-module-for-mono/186323>\
**Category:** IronRuby\
**Created:** [April 4, 2010, 8:35pm UTC](https://www.ruby-forum.com/t/re-anyone-interested-in-implementing-etc-module-for-mono/186323 "2010-04-04T20:35:27Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![raker\_t](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/ecae2f/32.png) [@raker\_t](https://www.ruby-forum.com/u/raker_t)\
**Post date:** [April 4, 2010, 8:35pm UTC](https://www.ruby-forum.com/t/re-anyone-interested-in-implementing-etc-module-for-mono/186323/1 "2010-04-04T20:35:27Z")

</div>

Most of the libraries are still poorly specced. I actually wrote most of  
the current etc ones in order to get them passing. If you look around  
though, you can find places in the lib specs that are empty files ☹

* * *

From: Shri B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Sent: Sunday, April 04, 2010 10:58 AM  
To: removed\_email\_address@domain.invalid [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Subject: Re: [Ironruby-core] Anyone interested in implementing Etc  
module for Mono?

If you run â€œmspec ci library\etcâ€, that runs the real RubySpec specs.  
irtests does run a command like â€œmspec ci libâ€ which will run the Etc  
RubySpec specs. [http://wiki.github.com/ironruby/ironruby/rubyspec](http://wiki.github.com/ironruby/ironruby/rubyspec) might  
be useful to you about how these scripts work.

The RubySpecs are supposed to be working on all platforms. The specs use  
checks like â€œplatform\_is :windowsâ€ or â€œplatform\_is\_not :windowsâ€ to have  
versions for all OSes. I am surprised that the current ones expect nil.  
You can fix them to have versions of the specs that work on Unixes. You  
can run the tests against MRI using â€œmspec â€“trâ€ to ensure that the spec  
you add is correct.

If you can streamline the development process for Mono, that will be  
great so others have an easier time in the futureâ€¦

From: removed\_email\_address@domain.invalid  
[[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)] On Behalf Of Ryan R.  
Sent: Sunday, April 04, 2010 9:54 AM  
To: removed\_email\_address@domain.invalid  
Subject: Re: [Ironruby-core] Anyone interested in implementing Etc  
module for Mono?

I’ve posted all the type fixes, but since I can’t compile master, I’m  
hesitant to rebase. What should I do? Also, I still haven’t gotten to  
the tests. Looks like the current ones all expect nil and assume  
Windows. Are those the real rubyspec specs?

Sent from my iPhone

On Apr 3, 2010, at 10:13 PM, Jim D.  
\<removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\> wrote:  
Also, to get a Int32 out of a UInt32, you should be able to use  
induced\_from:

> > > a = System::UInt32.new(1)  
> > > =\> 1 (UInt32)  
> > > Fixnum.induced\_from(a)  
> > > =\> 1

Minor thing, but it will work.

The fact that etc is a class is my bad. I was just getting enough  
implemented in order to pass some specs and use libraries that expected  
the nil on Windows.

JD

From:  
removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)] On Behalf Of Tomas M.  
Sent: Saturday, April 03, 2010 6:01 PM  
To: removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Subject: Re: [Ironruby-core] Anyone interested in implementing Etc  
module for Mono?

That is a bug. Make it a module.

Tomas

From:  
removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)] On Behalf Of Ryan R.  
Sent: Saturday, April 03, 2010 5:02 PM  
To: removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Subject: Re: [Ironruby-core] Anyone interested in implementing Etc  
module for Mono?

Quick question: The etc.rb in Libs is a class, but the implementation in  
the Ruby Standard Library appears to be a module. Should I keep the  
class or use the module?

Ryan R.  
On Sat, Apr 3, 2010 at 4:43 PM, Tomas M.  
\<removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\>  
wrote:  
Nice work.

A few suggestions:

- 

```
     You can move the file to 

```

C:\M0\Merlin\Main\Languages\Ruby\Libs.

- 

```
     Use System::Environment:: 

```

System::Environment.OSVersion.Platform to detect the OS (see e.g.  
Win32API.rb in Libs).

- 

```
     Rather than check for the platform in every method it might 

```

be better to define the methods differently on Windows. Something like:

module Etc  
platform = System::PlatformID  
case System::Environment.OSVersion.Platform  
when platform.Win32S, platform.WinCE, platform.Win32Windows,  
platform.Win32NT:

```
def self.endgrent; end

```

def self.endpwent; end  
def self.getgrent; end  
â€¦  
else

load\_assembly ‘Mono.Posix’

def self.endgrent

```
Mono::Unix::Native::Syscall.endgrent

```

end

def self.endpwent

```
Mono::Unix::Native::Syscall.endpwent

```

end

def self.getgrent

```
to_group(Mono::Unix::Native::Syscall.getgrent)

```

end

â€¦  
end  
end

From:  
removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)]  
On Behalf Of Ryan R.  
Sent: Saturday, April 03, 2010 3:59 PM

To: removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Subject: Re: [Ironruby-core] Anyone interested in implementing Etc  
module for Mono?

I’ve posted an initial “complete” implementation, though I have only  
done basic testing. I have a couple of TODO’s remaining and some  
cleanup, as well as writing actual specs. I still don’t have tests  
running. You can find the module here:  
[http://github.com/panesofglass/ironruby/blob/linux/Merlin/External.LCA\_RESTRICTED/Languages/IronRuby/Etc/IronRuby.Libraries.Etc/etc.rb](http://github.com/panesofglass/ironruby/blob/linux/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/Etc/IronRuby.Libraries.Etc/etc.rb)

Not the prettiest thing in the world, but I just wanted to get it  
working. I definitely still have work to do.

Cheers,

Ryan R.

Email: removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
LinkedIn: [http://www.linkedin.com/in/ryanriley](http://www.linkedin.com/in/ryanriley)  
Blog: [http://wizardsofsmart.net/](http://wizardsofsmart.net/)  
Twitter: @panesofglass  
Website: [http://panesofglass.org/](http://panesofglass.org/)  
On Sat, Apr 3, 2010 at 2:30 PM, Ryan R.  
\<removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\> wrote:  
Sure!  
Mono::Unix::Native::Passwd[http://www.go-mono.com/docs/index.aspx?link=T:Mono.Unix.Native.Passwd](http://www.go-mono.com/docs/index.aspx?link=T:Mono.Unix.Native.Passwd)  
and  
Mono::Unix::Native::Group[http://www.go-mono.com/docs/index.aspx?link=T:Mono.Unix.Native.Group](http://www.go-mono.com/docs/index.aspx?link=T:Mono.Unix.Native.Group)  
that are returned from the  
Mono::Unix::Native::Syscall[http://www.go-mono.com/docs/index.aspx?link=M:Mono.Posix.Syscall.getusername(System.Int32](http://www.go-mono.com/docs/index.aspx?link=M:Mono.Posix.Syscall.getusername(System.Int32)  
functions have UInt32, System.String, and System.String[]. System.String  
is no biggie, and I’m finding .to\_i on a System.UInt32 is still  
displayed as System.UInt32, so I suppose that’s not an issue, either.  
MRI displays Fixnum as the type, and I was trying to get the correct  
types back from the functions. That leaves MRI’s Array to Mono’s  
System.String[].

My current implementation is just a Ruby module wrapping calls to the  
Mono functions and returning the appropriate types. Most of it is  
working, though without being able to run tests easily, I’m testing from  
the command line. I still need to add conditionals to return nil if it’s  
run on Windows. I suppose I also need to conditionally load the  
Mono.Posix.dll if it’s on Windows, too.

I’m about to finish the basic implementation and post to  
github[http://github.com/panesofglass/ironruby/blob/linux/Merlin/External.LCA\_RESTRICTED/Languages/IronRuby/Etc/IronRuby.Libraries.Etc/etc.rb](http://github.com/panesofglass/ironruby/blob/linux/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/Etc/IronRuby.Libraries.Etc/etc.rb).  
(I’ve already got what I finished last night up there.) I also asked  
Shri for a pairing session to make sure it’s inline with what you’re  
wanting.

Cheers,

Ryan R.

Email: removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
LinkedIn: [http://www.linkedin.com/in/ryanriley](http://www.linkedin.com/in/ryanriley)  
Blog: [http://wizardsofsmart.net/](http://wizardsofsmart.net/)  
Twitter: @panesofglass  
Website: [http://panesofglass.org/](http://panesofglass.org/)  
On Sat, Apr 3, 2010 at 11:25 AM, Tomas M.  
\<removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\>  
wrote:  
Can you give an example of where you need the conversions?

Tomas

From:  
removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)]  
On Behalf Of Jim D.  
Sent: Saturday, April 03, 2010 11:00 AM

To: removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Subject: Re: [Ironruby-core] Anyone interested in implementing Etc  
module for Mono?

No conversion for Fixnums is needed (Fixnums are ints). Arrays are  
harder. I would take a look at clr\_ext in  
merlin/main/languages/ruby/samples. Inside that file is a to\_clr\_array  
method

JD

* * *

From: Ryan R.  
\<removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\>  
Sent: Saturday, April 03, 2010 12:13 AM  
To: removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
\<removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\>  
Subject: Re: [Ironruby-core] Anyone interested in implementing Etc  
module for Mono?  
Where is documentation on converting between CLR and Ruby types? I can  
get RubyStrings, but what about Fixnum and Array?

Thanks,

Ryan R.

* * *

Ironruby-core mailing list  
removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[http://rubyforge.org/mailman/listinfo/ironruby-core](http://rubyforge.org/mailman/listinfo/ironruby-core)

* * *

Ironruby-core mailing list  
removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[http://rubyforge.org/mailman/listinfo/ironruby-core](http://rubyforge.org/mailman/listinfo/ironruby-core)
