[erlang-patches] exporting a new function in prim_file.erl
Filipe David Manana
fdmanana@REDACTED
Wed Apr 21 19:27:55 CEST 2010
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@REDACTED>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@REDACTED>wrote:
>
>> Hi Filipe,
>>
>> On 21 April 2010 18:18, Filipe David Manana <fdmanana@REDACTED> 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@REDACTED
>
> "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@REDACTED
"Reasonable men adapt themselves to the world.
Unreasonable men adapt the world to themselves.
That's why all progress depends on unreasonable men."
More information about the erlang-patches
mailing list