Erlang Mailing Lists

Author Message

<  Erlang patches mailing list  ~  exporting a new function in prim_file.erl

Guest
Posted: Wed Apr 21, 2010 4:18 pm Reply with quote
Guest
Hello,

I'm trying to add a new function to prim_file.erl that will be called by
file_io_server.erl. Therefore I export it in the first export macro.

This new function happens to have exactly the same interface (arity and arg
type, return values) as prim_file:sync/1, so I copied the sync function
clause, renamed it, and added the corresponding export.

After building and installing OTP, I get an error when calling
file:my_func/1:

=ERROR REPORT==== 21-Apr-2010::16:30:53 ===
Error in process <0.35.0> with exit value:
{undef,[{prim_file,my_func[{file_descriptor,prim_file,{#Port<0.500>,7}}]},{file_io_server,file_request,2},{file_io_server,server_loop,1}]}

file:my_func/1 just calls file_io_server:my_func/1 wich in turn calls
prim_file:my_func/1.

It seems that prim_file is not exporting my_func. Yet I have an explicit
"-define([... sync/1 my_func/1 ...])."

The Erlang shell is not recognizing prim_file:my_func/1 (through tab auto
completion).

My code path also seems to be correct.

What am I missing here?

thanks,

--
Filipe David Manana,
fdmanana@gmail.com

"Reasonable men adapt themselves to the world.
Unreasonable men adapt the world to themselves.
That's why all progress depends on unreasonable men."


Post received from mailinglist
Guest
Posted: Wed Apr 21, 2010 4:18 pm Reply with quote
Guest
Hello,

I'm trying to add a new function to prim_file.erl that will be called by
file_io_server.erl. Therefore I export it in the first export macro.

This new function happens to have exactly the same interface (arity and arg
type, return values) as prim_file:sync/1, so I copied the sync function
clause, renamed it, and added the corresponding export.

After building and installing OTP, I get an error when calling
file:my_func/1:

=ERROR REPORT==== 21-Apr-2010::16:30:53 ===
Error in process <0.35.0> with exit value:
{undef,[{prim_file,my_func[{file_descriptor,prim_file,{#Port<0.500>,7}}]},{file_io_server,file_request,2},{file_io_server,server_loop,1}]}

file:my_func/1 just calls file_io_server:my_func/1 wich in turn calls
prim_file:my_func/1.

It seems that prim_file is not exporting my_func. Yet I have an explicit
"-define([... sync/1 my_func/1 ...])."

The Erlang shell is not recognizing prim_file:my_func/1 (through tab auto
completion).

My code path also seems to be correct.

What am I missing here?

thanks,

--
Filipe David Manana,
fdmanana@gmail.com

"Reasonable men adapt themselves to the world.
Unreasonable men adapt the world to themselves.
That's why all progress depends on unreasonable men."


Post received from mailinglist
rvirding
Posted: Wed Apr 21, 2010 4:27 pm Reply with quote
User Joined: 30 Aug 2006 Posts: 452 Location: Stockholm, Sweden
Hi Filipe,

On 21 April 2010 18:18, Filipe David Manana <fdmanana@gmail.com> wrote:
> Hello,
>
> I'm trying to add a new function to prim_file.erl that will be called by
> file_io_server.erl. Therefore I export it in the first export macro.
>
> This new function happens to have exactly the same interface (arity and arg
> type, return values) as prim_file:sync/1, so I copied the sync function
> clause, renamed it, and added the corresponding export.
>
> After building and installing OTP, I get an error when calling
> file:my_func/1:
>
> =ERROR REPORT==== 21-Apr-2010::16:30:53 ===
> Error in process <0.35.0> with exit value:
> {undef,[{prim_file,my_func[{file_descriptor,prim_file,{#Port<0.500>,7}}]},{file_io_server,file_request,2},{file_io_server,server_loop,1}]}
>
> file:my_func/1 just calls file_io_server:my_func/1 wich in turn calls
> prim_file:my_func/1.
>
> It seems that prim_file is not exporting
View user's profile Send private message Visit poster's website MSN Messenger
rvirding
Posted: Wed Apr 21, 2010 4:27 pm Reply with quote
User Joined: 30 Aug 2006 Posts: 452 Location: Stockholm, Sweden
Hi Filipe,

On 21 April 2010 18:18, Filipe David Manana <fdmanana@gmail.com> wrote:
> Hello,
>
> I'm trying to add a new function to prim_file.erl that will be called by
> file_io_server.erl. Therefore I export it in the first export macro.
>
> This new function happens to have exactly the same interface (arity and arg
> type, return values) as prim_file:sync/1, so I copied the sync function
> clause, renamed it, and added the corresponding export.
>
> After building and installing OTP, I get an error when calling
> file:my_func/1:
>
> =ERROR REPORT==== 21-Apr-2010::16:30:53 ===
> Error in process <0.35.0> with exit value:
> {undef,[{prim_file,my_func[{file_descriptor,prim_file,{#Port<0.500>,7}}]},{file_io_server,file_request,2},{file_io_server,server_loop,1}]}
>
> file:my_func/1 just calls file_io_server:my_func/1 wich in turn calls
> prim_file:my_func/1.
>
> It seems that prim_file is not exporting
View user's profile Send private message Visit poster's website MSN Messenger
Guest
Posted: Wed Apr 21, 2010 4:43 pm Reply with quote
Guest
Ups, misspelled it.
I do have it in an exports declaration (copy paste from my prim_file.erl) :

%%% Interface towards a single file's contents. Uses ?FD_DRV.

%% Generic file contents operations
-export([open/2, close/1, my_func/1, sync/1, position/2, truncate/1,
write/2, pwrite/2, pwrite/3, read/2, read_line/1, pread/2, pread/3,
copy/3]).

This is why I am finding it very weird.

In the shell:

5> lists:member("/opt/dev-otp/lib/erlang/lib/kernel-2.13.5/ebin",
code:get_path()).
true
6> code:which(prim_file).
preloaded
7> prim_file:
altname/1 altname/2 close/1
copy/3 del_dir/1 del_dir/2
delete/1 delete/2 get_cwd/0
get_cwd/1 get_cwd/2 ipread_s32bu_p32bu/3
list_dir/1 list_dir/2 make_dir/1
make_dir/2 make_link/2 make_link/3
make_symlink/2 make_symlink/3 module_info/0
module_info/1 open/1 open/2
open/3 open_int/4 open_mode/1
open_mode/4 position/2 pread/2
pread/3 pwrite/2 pwrite/3
read/2 read_file/1 read_file/2
read_file_info/1 read_file_info/2 read_line/1
read_link/1 read_link/2 read_link_info/1
read_link_info/2 rename/2 rename/3
set_cwd/1 set_cwd/2 start/0
stop/1 sync/1 truncate/1
write/2 write_file/2 write_file_info/2
write_file_info/3
7>

Are preloaded modules different from regular modules?

On Wed, Apr 21, 2010 at 5:26 PM, Robert Virding <rvirding@gmail.com> wrote:

> Hi Filipe,
>
> On 21 April 2010 18:18, Filipe David Manana <fdmanana@gmail.com> wrote:
> > Hello,
> >
> > I'm trying to add a new function to prim_file.erl that will be called by
> > file_io_server.erl. Therefore I export it in the first export macro.
> >
> > This new function happens to have exactly the same interface (arity and
> arg
> > type, return values) as prim_file:sync/1, so I copied the sync function
> > clause, renamed it, and added the corresponding export.
> >
> > After building and installing OTP, I get an error when calling
> > file:my_func/1:
> >
> > =ERROR REPORT==== 21-Apr-2010::16:30:53 ===
> > Error in process <0.35.0> with exit value:
> >
> {undef,[{prim_file,my_func[{file_descriptor,prim_file,{#Port<0.500>,7}}]},{file_io_server,file_request,2},{file_io_server,server_loop,1}]}
> >
> > file:my_func/1 just calls file_io_server:my_func/1 wich in turn calls
> > prim_file:my_func/1.
> >
> > It seems that prim_file is not exporting my_func. Yet I have an explicit
> > "-define([... sync/1 my_func/1 ...])."
>
> This, -define, is used to define macros, not for exporting functions
> from a module. It should be:
>
> -export(([... sync/1 my_func/1 ...]).
>
> There is an export declaration already which exports the old
> functions. It is perfectly ok to have many export declaration, I use
> that to cluster various "classes" of exported functions.
>
> Robert
>



--
Filipe David Manana,
fdmanana@gmail.com

"Reasonable men adapt themselves to the world.
Unreasonable men adapt the world to themselves.
That's why all progress depends on unreasonable men."


Post received from mailinglist
Guest
Posted: Wed Apr 21, 2010 4:44 pm Reply with quote
Guest
Ups, misspelled it.
I do have it in an exports declaration (copy paste from my prim_file.erl) :

%%% Interface towards a single file's contents. Uses ?FD_DRV.

%% Generic file contents operations
-export([open/2, close/1, my_func/1, sync/1, position/2, truncate/1,
write/2, pwrite/2, pwrite/3, read/2, read_line/1, pread/2, pread/3,
copy/3]).

This is why I am finding it very weird.

In the shell:

5> lists:member("/opt/dev-otp/lib/erlang/lib/kernel-2.13.5/ebin",
code:get_path()).
true
6> code:which(prim_file).
preloaded
7> prim_file:
altname/1 altname/2 close/1
copy/3 del_dir/1 del_dir/2
delete/1 delete/2 get_cwd/0
get_cwd/1 get_cwd/2 ipread_s32bu_p32bu/3
list_dir/1 list_dir/2 make_dir/1
make_dir/2 make_link/2 make_link/3
make_symlink/2 make_symlink/3 module_info/0
module_info/1 open/1 open/2
open/3 open_int/4 open_mode/1
open_mode/4 position/2 pread/2
pread/3 pwrite/2 pwrite/3
read/2 read_file/1 read_file/2
read_file_info/1 read_file_info/2 read_line/1
read_link/1 read_link/2 read_link_info/1
read_link_info/2 rename/2 rename/3
set_cwd/1 set_cwd/2 start/0
stop/1 sync/1 truncate/1
write/2 write_file/2 write_file_info/2
write_file_info/3
7>

Are preloaded modules different from regular modules?

On Wed, Apr 21, 2010 at 5:26 PM, Robert Virding <rvirding@gmail.com> wrote:

> Hi Filipe,
>
> On 21 April 2010 18:18, Filipe David Manana <fdmanana@gmail.com> wrote:
> > Hello,
> >
> > I'm trying to add a new function to prim_file.erl that will be called by
> > file_io_server.erl. Therefore I export it in the first export macro.
> >
> > This new function happens to have exactly the same interface (arity and
> arg
> > type, return values) as prim_file:sync/1, so I copied the sync function
> > clause, renamed it, and added the corresponding export.
> >
> > After building and installing OTP, I get an error when calling
> > file:my_func/1:
> >
> > =ERROR REPORT==== 21-Apr-2010::16:30:53 ===
> > Error in process <0.35.0> with exit value:
> >
> {undef,[{prim_file,my_func[{file_descriptor,prim_file,{#Port<0.500>,7}}]},{file_io_server,file_request,2},{file_io_server,server_loop,1}]}
> >
> > file:my_func/1 just calls file_io_server:my_func/1 wich in turn calls
> > prim_file:my_func/1.
> >
> > It seems that prim_file is not exporting my_func. Yet I have an explicit
> > "-define([... sync/1 my_func/1 ...])."
>
> This, -define, is used to define macros, not for exporting functions
> from a module. It should be:
>
> -export(([... sync/1 my_func/1 ...]).
>
> There is an export declaration already which exports the old
> functions. It is perfectly ok to have many export declaration, I use
> that to cluster various "classes" of exported functions.
>
> Robert
>



--
Filipe David Manana,
fdmanana@gmail.com

"Reasonable men adapt themselves to the world.
Unreasonable men adapt the world to themselves.
That's why all progress depends on unreasonable men."


Post received from mailinglist
Guest
Posted: Wed Apr 21, 2010 5:29 pm Reply with quote
Guest
Found the solution. Just need to execute:


./otp_build update_preloaded

after doing make, and before make install

cheers

On Wed, Apr 21, 2010 at 5:43 PM, Filipe David Manana <fdmanana@gmail.com>wrote:

>
> Ups, misspelled it.
> I do have it in an exports declaration (copy paste from my prim_file.erl) :
>
> %%% Interface towards a single file's contents. Uses ?FD_DRV.
>
> %% Generic file contents operations
> -export([open/2, close/1, my_func/1, sync/1, position/2, truncate/1,
> write/2, pwrite/2, pwrite/3, read/2, read_line/1, pread/2, pread/3,
> copy/3]).
>
> This is why I am finding it very weird.
>
> In the shell:
>
> 5> lists:member("/opt/dev-otp/lib/erlang/lib/kernel-2.13.5/ebin",
> code:get_path()).
> true
> 6> code:which(prim_file).
> preloaded
> 7> prim_file:
> altname/1 altname/2 close/1
> copy/3 del_dir/1 del_dir/2
> delete/1 delete/2 get_cwd/0
> get_cwd/1 get_cwd/2 ipread_s32bu_p32bu/3
> list_dir/1 list_dir/2 make_dir/1
> make_dir/2 make_link/2 make_link/3
> make_symlink/2 make_symlink/3 module_info/0
> module_info/1 open/1 open/2
> open/3 open_int/4 open_mode/1
> open_mode/4 position/2 pread/2
> pread/3 pwrite/2 pwrite/3
> read/2 read_file/1 read_file/2
> read_file_info/1 read_file_info/2 read_line/1
> read_link/1 read_link/2 read_link_info/1
> read_link_info/2 rename/2 rename/3
> set_cwd/1 set_cwd/2 start/0
> stop/1 sync/1 truncate/1
> write/2 write_file/2 write_file_info/2
> write_file_info/3
> 7>
>
> Are preloaded modules different from regular modules?
>
>
> On Wed, Apr 21, 2010 at 5:26 PM, Robert Virding <rvirding@gmail.com>wrote:
>
>> Hi Filipe,
>>
>> On 21 April 2010 18:18, Filipe David Manana <fdmanana@gmail.com> wrote:
>> > Hello,
>> >
>> > I'm trying to add a new function to prim_file.erl that will be called by
>> > file_io_server.erl. Therefore I export it in the first export macro.
>> >
>> > This new function happens to have exactly the same interface (arity and
>> arg
>> > type, return values) as prim_file:sync/1, so I copied the sync function
>> > clause, renamed it, and added the corresponding export.
>> >
>> > After building and installing OTP, I get an error when calling
>> > file:my_func/1:
>> >
>> > =ERROR REPORT==== 21-Apr-2010::16:30:53 ===
>> > Error in process <0.35.0> with exit value:
>> >
>> {undef,[{prim_file,my_func[{file_descriptor,prim_file,{#Port<0.500>,7}}]},{file_io_server,file_request,2},{file_io_server,server_loop,1}]}
>> >
>> > file:my_func/1 just calls file_io_server:my_func/1 wich in turn calls
>> > prim_file:my_func/1.
>> >
>> > It seems that prim_file is not exporting my_func. Yet I have an
>> explicit
>> > "-define([... sync/1 my_func/1 ...])."
>>
>> This, -define, is used to define macros, not for exporting functions
>> from a module. It should be:
>>
>> -export(([... sync/1 my_func/1 ...]).
>>
>> There is an export declaration already which exports the old
>> functions. It is perfectly ok to have many export declaration, I use
>> that to cluster various "classes" of exported functions.
>>
>> Robert
>>
>
>
>
> --
> Filipe David Manana,
> fdmanana@gmail.com
>
> "Reasonable men adapt themselves to the world.
> Unreasonable men adapt the world to themselves.
> That's why all progress depends on unreasonable men."
>
>


--
Filipe David Manana,
fdmanana@gmail.com

"Reasonable men adapt themselves to the world.
Unreasonable men adapt the world to themselves.
That's why all progress depends on unreasonable men."


Post received from mailinglist
Guest
Posted: Wed Apr 21, 2010 5:30 pm Reply with quote
Guest
Found the solution. Just need to execute:


./otp_build update_preloaded

after doing make, and before make install

cheers

On Wed, Apr 21, 2010 at 5:43 PM, Filipe David Manana <fdmanana@gmail.com>wrote:

>
> Ups, misspelled it.
> I do have it in an exports declaration (copy paste from my prim_file.erl) :
>
> %%% Interface towards a single file's contents. Uses ?FD_DRV.
>
> %% Generic file contents operations
> -export([open/2, close/1, my_func/1, sync/1, position/2, truncate/1,
> write/2, pwrite/2, pwrite/3, read/2, read_line/1, pread/2, pread/3,
> copy/3]).
>
> This is why I am finding it very weird.
>
> In the shell:
>
> 5> lists:member("/opt/dev-otp/lib/erlang/lib/kernel-2.13.5/ebin",
> code:get_path()).
> true
> 6> code:which(prim_file).
> preloaded
> 7> prim_file:
> altname/1 altname/2 close/1
> copy/3 del_dir/1 del_dir/2
> delete/1 delete/2 get_cwd/0
> get_cwd/1 get_cwd/2 ipread_s32bu_p32bu/3
> list_dir/1 list_dir/2 make_dir/1
> make_dir/2 make_link/2 make_link/3
> make_symlink/2 make_symlink/3 module_info/0
> module_info/1 open/1 open/2
> open/3 open_int/4 open_mode/1
> open_mode/4 position/2 pread/2
> pread/3 pwrite/2 pwrite/3
> read/2 read_file/1 read_file/2
> read_file_info/1 read_file_info/2 read_line/1
> read_link/1 read_link/2 read_link_info/1
> read_link_info/2 rename/2 rename/3
> set_cwd/1 set_cwd/2 start/0
> stop/1 sync/1 truncate/1
> write/2 write_file/2 write_file_info/2
> write_file_info/3
> 7>
>
> Are preloaded modules different from regular modules?
>
>
> On Wed, Apr 21, 2010 at 5:26 PM, Robert Virding <rvirding@gmail.com>wrote:
>
>> Hi Filipe,
>>
>> On 21 April 2010 18:18, Filipe David Manana <fdmanana@gmail.com> wrote:
>> > Hello,
>> >
>> > I'm trying to add a new function to prim_file.erl that will be called by
>> > file_io_server.erl. Therefore I export it in the first export macro.
>> >
>> > This new function happens to have exactly the same interface (arity and
>> arg
>> > type, return values) as prim_file:sync/1, so I copied the sync function
>> > clause, renamed it, and added the corresponding export.
>> >
>> > After building and installing OTP, I get an error when calling
>> > file:my_func/1:
>> >
>> > =ERROR REPORT==== 21-Apr-2010::16:30:53 ===
>> > Error in process <0.35.0> with exit value:
>> >
>> {undef,[{prim_file,my_func[{file_descriptor,prim_file,{#Port<0.500>,7}}]},{file_io_server,file_request,2},{file_io_server,server_loop,1}]}
>> >
>> > file:my_func/1 just calls file_io_server:my_func/1 wich in turn calls
>> > prim_file:my_func/1.
>> >
>> > It seems that prim_file is not exporting my_func. Yet I have an
>> explicit
>> > "-define([... sync/1 my_func/1 ...])."
>>
>> This, -define, is used to define macros, not for exporting functions
>> from a module. It should be:
>>
>> -export(([... sync/1 my_func/1 ...]).
>>
>> There is an export declaration already which exports the old
>> functions. It is perfectly ok to have many export declaration, I use
>> that to cluster various "classes" of exported functions.
>>
>> Robert
>>
>
>
>
> --
> Filipe David Manana,
> fdmanana@gmail.com
>
> "Reasonable men adapt themselves to the world.
> Unreasonable men adapt the world to themselves.
> That's why all progress depends on unreasonable men."
>
>


--
Filipe David Manana,
fdmanana@gmail.com

"Reasonable men adapt themselves to the world.
Unreasonable men adapt the world to themselves.
That's why all progress depends on unreasonable men."


Post received from mailinglist

Display posts from previous:  

All times are GMT
Page 1 of 1
This forum is locked: you cannot post, reply to, or edit topics.

Jump to:  

You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum