<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-IN link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal>I am a student of whatever the name “Erlang”
stands for – programming language, operating system, database system,
platform (whatever)!<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>I am in a (mental) process of making NIF, and the two objects
in front of me are: <a href="http://www.erlang.org/doc/tutorial/nif.html">http://www.erlang.org/doc/tutorial/nif.html</a>
and <a href="http://www.erlang.org/doc/man/erl_nif.html">http://www.erlang.org/doc/man/erl_nif.html</a><o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>The NIF is meant for the private consumption of my
application, not to be exported for public. So, the pre & post conditions for
the NIF invocation are controlled. The onward and return payload for the NIF is
“binary”.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>By looking at the examples and the pattern of the set of
library functions in erl_nif, I (falsely) imagined that there would be
something like enif_get_binary() for receiving and enif_make_binary() for
returning, available in the library. While the latter was found and its
semantics for read-only (and memory release) understood from the documentation,
the former call, i.e. enif_get_binary(), was nowhere to be found.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>Then, I found enif_get_string() – the progression of time
in the mental process is important here (at least, from a student’s point
of view). The thought did rise that perhaps I needed to pass a list of bytes (instead
of binary) to the NIF, but the last parameter, i.e. ErlNifCharEncoding, of
enif_get_string() stopped that thought, for I didn’t intend to encode the
bytes in ERL_NIF_LATIN1.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>So, I searched more, and found enif_inspect_binary() and
just below it the enif_is_binary() library function. For a moment, I doubted
why two calls for apparently same purpose – which is “gathered”
from the naming, only to find that the former, i.e. enif_inspect_binary(), not
only inspects but also initializes the ErlNifBinary structure, from where I
could pick up the payload and do the needful before calling enif_make_binary() at
the time of returning from NIF. I am still in a mental process, here.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>So, the question is: What considerations are needed, to
have, specifically for NIF and in general for Erlang, to appreciate the name
enif_inspect_binary() instead of enif_get_binary()? I suppose there are several
such “naming” places in Erlang, and I raised this particular one only
to give a play to the “why” urge in me.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>Thanks<o:p></o:p></p>

<p class=MsoNormal>Avinash<o:p></o:p></p>

</div>

</body>

</html>