<refentry id="libnetdude-libnd-misc">
<refmeta>
<refentrytitle id="top_of_page">libnd_misc</refentrytitle>
<manvolnum>3</manvolnum>
<refmiscinfo>LIBNETDUDE Library</refmiscinfo>
</refmeta>

<refnamediv>
<refname>libnd_misc</refname>
<refpurpose></refpurpose>
<!--[<xref linkend="desc" endterm="desc.title"/>]-->
</refnamediv>

<refsynopsisdiv id="synopsis">
<title id="synopsis.title">Synopsis</title>

<synopsis>



<link linkend="guint">guint</link>       <link linkend="libnd-misc-writen">libnd_misc_writen</link>               (<link linkend="int">int</link> fd,
                                             const <link linkend="guchar">guchar</link> *data,
                                             <link linkend="guint">guint</link> size);
<link linkend="guint">guint</link>       <link linkend="libnd-misc-readn">libnd_misc_readn</link>                (<link linkend="int">int</link> fd,
                                             <link linkend="guchar">guchar</link> *data,
                                             <link linkend="guint">guint</link> size);
<link linkend="guint">guint</link>       <link linkend="libnd-misc-readline">libnd_misc_readline</link>             (<link linkend="int">int</link> fd,
                                             <link linkend="guchar">guchar</link> *data,
                                             <link linkend="guint">guint</link> size);
<link linkend="int">int</link>         <link linkend="libnd-misc-ones-complement-checksum">libnd_misc_ones_complement_checksum</link>
                                            (const <link linkend="void">void</link> *data,
                                             <link linkend="int">int</link> data_len,
                                             <link linkend="u-int32-t">u_int32_t</link> sum);
<link linkend="u-short">u_short</link>     <link linkend="libnd-misc-in-cksum">libnd_misc_in_cksum</link>             (<link linkend="u-short">u_short</link> *addr,
                                             <link linkend="int">int</link> addr_len,
                                             <link linkend="u-int">u_int</link> preadd);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-misc-exists">libnd_misc_exists</link>               (const <link linkend="char">char</link> *filename);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-misc-can-read">libnd_misc_can_read</link>             (const <link linkend="char">char</link> *filename);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-misc-can-write">libnd_misc_can_write</link>            (const <link linkend="char">char</link> *filename);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-misc-is-tcpdump-file">libnd_misc_is_tcpdump_file</link>      (const <link linkend="char">char</link> *filename);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-misc-can-exec">libnd_misc_can_exec</link>             (const <link linkend="char">char</link> *filename);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-misc-is-dir">libnd_misc_is_dir</link>               (const <link linkend="char">char</link> *filename);
<link linkend="gint">gint</link>        <link linkend="libnd-misc-int-cmp">libnd_misc_int_cmp</link>              (<link linkend="gconstpointer">gconstpointer</link> int1,
                                             <link linkend="gconstpointer">gconstpointer</link> int2);
<link linkend="char">char</link>*       <link linkend="libnd-misc-add-slash">libnd_misc_add_slash</link>            (<link linkend="char">char</link> *filename);
<link linkend="GList">GList</link>*      <link linkend="libnd-misc-get-if-names">libnd_misc_get_if_names</link>         (<link linkend="int">int</link> flags);
<link linkend="int">int</link>         <link linkend="libnd-misc-get-if-mtu">libnd_misc_get_if_mtu</link>           (const <link linkend="char">char</link> *ifname);
<link linkend="void">void</link>        <link linkend="libnd-misc-get-hardware-string">libnd_misc_get_hardware_string</link>  (<link linkend="char">char</link> *str,
                                             <link linkend="guint">guint</link> str_len,
                                             <link linkend="guchar">guchar</link> *address,
                                             <link linkend="guint">guint</link> addr_len);
<link linkend="char">char</link>*       <link linkend="libnd-misc-get-unnamed-string">libnd_misc_get_unnamed_string</link>   (void);
<link linkend="char">char</link>*       <link linkend="libnd-misc-timeval-to-string">libnd_misc_timeval_to_string</link>    (struct <link linkend="bpf-timeval">bpf_timeval</link> *tv);
<link linkend="guchar">guchar</link>*     <link linkend="libnd-misc-memdup">libnd_misc_memdup</link>               (const <link linkend="guchar">guchar</link> *data,
                                             <link linkend="guint">guint</link> data_len);
<link linkend="void">void</link>        <link linkend="libnd-misc-ctime">libnd_misc_ctime</link>                (const struct <link linkend="bpf-timeval">bpf_timeval</link> *tv,
                                             <link linkend="char">char</link> *buf,
                                             <link linkend="int">int</link> buflen,
                                             <link linkend="gboolean">gboolean</link> fix_gmt,
                                             <link linkend="gboolean">gboolean</link> add_usec);
<link linkend="int">int</link>         <link linkend="libnd-misc-get-gmt-deviation">libnd_misc_get_gmt_deviation</link>    (void);
<link linkend="char">char</link>*       <link linkend="libnd-misc-get-tmpfile">libnd_misc_get_tmpfile</link>          (const <link linkend="char">char</link> *filename);
</synopsis>
</refsynopsisdiv>









<refsect1 id="desc">
<title id="desc.title">Description</title>
<para>

</para>
</refsect1>

<refsect1 id="details">
<title id="details.title">Details</title>
<refsect2>
<title><anchor id="libnd-misc-writen" role="function">libnd_misc_writen ()</title>
<indexterm><primary>libnd_misc_writen</primary></indexterm><programlisting><link linkend="guint">guint</link>       libnd_misc_writen               (<link linkend="int">int</link> fd,
                                             const <link linkend="guchar">guchar</link> *data,
                                             <link linkend="guint">guint</link> size);</programlisting>
<para>
The function tries to write n buffers to the given
file descriptor.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>fd</parameter>&nbsp;:</term>
<listitem><simpara> file descriptor
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>data</parameter>&nbsp;:</term>
<listitem><simpara> data buffer
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>size</parameter>&nbsp;:</term>
<listitem><simpara> size of buffer
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> number of bytes written, or value &lt; 0 on error.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-readn" role="function">libnd_misc_readn ()</title>
<indexterm><primary>libnd_misc_readn</primary></indexterm><programlisting><link linkend="guint">guint</link>       libnd_misc_readn                (<link linkend="int">int</link> fd,
                                             <link linkend="guchar">guchar</link> *data,
                                             <link linkend="guint">guint</link> size);</programlisting>
<para>
The function tries to read n buffers from the given
file descriptor.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>fd</parameter>&nbsp;:</term>
<listitem><simpara> file descriptor
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>data</parameter>&nbsp;:</term>
<listitem><simpara> data buffer
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>size</parameter>&nbsp;:</term>
<listitem><simpara> size of buffer
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> number of bytes read, or value &lt; 0 on error.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-readline" role="function">libnd_misc_readline ()</title>
<indexterm><primary>libnd_misc_readline</primary></indexterm><programlisting><link linkend="guint">guint</link>       libnd_misc_readline             (<link linkend="int">int</link> fd,
                                             <link linkend="guchar">guchar</link> *data,
                                             <link linkend="guint">guint</link> size);</programlisting>
<para>
The function reads from a file descriptor until a newline is encountered.
WARNING -- this function can BLOCK.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>fd</parameter>&nbsp;:</term>
<listitem><simpara> file descriptor
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>data</parameter>&nbsp;:</term>
<listitem><simpara> data buffer
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>size</parameter>&nbsp;:</term>
<listitem><simpara> size of buffer
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> number of bytes read.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-ones-complement-checksum" role="function">libnd_misc_ones_complement_checksum ()</title>
<indexterm><primary>libnd_misc_ones_complement_checksum</primary></indexterm><programlisting><link linkend="int">int</link>         libnd_misc_ones_complement_checksum
                                            (const <link linkend="void">void</link> *data,
                                             <link linkend="int">int</link> data_len,
                                             <link linkend="u-int32-t">u_int32_t</link> sum);</programlisting>
<para>
The function computes the ones-complement checksum of the data
pointed to by <parameter>data</parameter>. If you want to extend the checksum over data
areas not included in <parameter>data</parameter>, you can pre-add the sum of that data
in units of short ints (16bit) and pass it as <parameter>sum</parameter>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>data</parameter>&nbsp;:</term>
<listitem><simpara> pointer to data to checksum.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>data_len</parameter>&nbsp;:</term>
<listitem><simpara> length of <parameter>data</parameter>.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>sum</parameter>&nbsp;:</term>
<listitem><simpara> pre-added input.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> checksum.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-in-cksum" role="function">libnd_misc_in_cksum ()</title>
<indexterm><primary>libnd_misc_in_cksum</primary></indexterm><programlisting><link linkend="u-short">u_short</link>     libnd_misc_in_cksum             (<link linkend="u-short">u_short</link> *addr,
                                             <link linkend="int">int</link> addr_len,
                                             <link linkend="u-int">u_int</link> preadd);</programlisting>
<para>
The function computes the Internet checksum of <parameter>addr</parameter>. Other data
can be included in the checksum by pre-added the sum if that data
in units of short ints (16bit) and passing it as <parameter>preadd</parameter>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>addr</parameter>&nbsp;:</term>
<listitem><simpara> data to checksum.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>addr_len</parameter>&nbsp;:</term>
<listitem><simpara> length of <parameter>addr</parameter> data.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>preadd</parameter>&nbsp;:</term>
<listitem><simpara> pre-added input.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> checksum.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-exists" role="function">libnd_misc_exists ()</title>
<indexterm><primary>libnd_misc_exists</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_misc_exists               (const <link linkend="char">char</link> *filename);</programlisting>
<para>
The function checks whether <parameter>filename</parameter> exists and returns
the result.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>filename</parameter>&nbsp;:</term>
<listitem><simpara> name of file.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> when <parameter>filename</parameter> exists, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-can-read" role="function">libnd_misc_can_read ()</title>
<indexterm><primary>libnd_misc_can_read</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_misc_can_read             (const <link linkend="char">char</link> *filename);</programlisting>
<para>
The function checks whether <parameter>filename</parameter> can be read and
returns the result.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>filename</parameter>&nbsp;:</term>
<listitem><simpara> name of file.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> if file is readable, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> if it is not or
if there is another error (such as <parameter>filename</parameter> doesn't exist).
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-can-write" role="function">libnd_misc_can_write ()</title>
<indexterm><primary>libnd_misc_can_write</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_misc_can_write            (const <link linkend="char">char</link> *filename);</programlisting>
<para>
The function checks whether <parameter>filename</parameter> can be written to and
returns the result.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>filename</parameter>&nbsp;:</term>
<listitem><simpara> name of file.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> if file is writeable, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> if it is not or
if there is another error (such as <parameter>filename</parameter> doesn't exist).
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-is-tcpdump-file" role="function">libnd_misc_is_tcpdump_file ()</title>
<indexterm><primary>libnd_misc_is_tcpdump_file</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_misc_is_tcpdump_file      (const <link linkend="char">char</link> *filename);</programlisting>
<para>
The function checks whether <parameter>filename</parameter> is a tcpdump savefile
by looking for tcpdump's magic <link linkend="0xa1b2c3d4"><literal>0xa1b2c3d4</literal></link> and its variations.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>filename</parameter>&nbsp;:</term>
<listitem><simpara> name of file.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> if test was positive, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise or if
there was an error.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-can-exec" role="function">libnd_misc_can_exec ()</title>
<indexterm><primary>libnd_misc_can_exec</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_misc_can_exec             (const <link linkend="char">char</link> *filename);</programlisting>
<para>
The function checks whether <parameter>filename</parameter> can be executed and
returns the result.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>filename</parameter>&nbsp;:</term>
<listitem><simpara> name of file.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> if file is executable, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> if it is not or
if there is another error (such as <parameter>filename</parameter> doesn't exist).
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-is-dir" role="function">libnd_misc_is_dir ()</title>
<indexterm><primary>libnd_misc_is_dir</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_misc_is_dir               (const <link linkend="char">char</link> *filename);</programlisting>
<para>
The function checks whether <parameter>filename</parameter> is a directory and
returns the result.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>filename</parameter>&nbsp;:</term>
<listitem><simpara> name of file.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> if file is a directory, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> if it is not or
if there is another error (such as <parameter>filename</parameter> doesn't exist).
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-int-cmp" role="function">libnd_misc_int_cmp ()</title>
<indexterm><primary>libnd_misc_int_cmp</primary></indexterm><programlisting><link linkend="gint">gint</link>        libnd_misc_int_cmp              (<link linkend="gconstpointer">gconstpointer</link> int1,
                                             <link linkend="gconstpointer">gconstpointer</link> int2);</programlisting>
<para>
This is a simple compare function for pointers that can be casted
(not dereferenced!) to ints, returning -1/0/1 of row1 is smaller/
equal/larger than row2. The signature allows usage with various
glib functions.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>int1</parameter>&nbsp;:</term>
<listitem><simpara> pointer using integer value.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>int2</parameter>&nbsp;:</term>
<listitem><simpara> pointer using integer value.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> comparison result.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-add-slash" role="function">libnd_misc_add_slash ()</title>
<indexterm><primary>libnd_misc_add_slash</primary></indexterm><programlisting><link linkend="char">char</link>*       libnd_misc_add_slash            (<link linkend="char">char</link> *filename);</programlisting>
<para>
The function checks if <parameter>filename</parameter> ends with a slash and if not,
reallocs the memory <parameter>filename</parameter> uses and appends a slash.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>filename</parameter>&nbsp;:</term>
<listitem><simpara> filename to test.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> resulting string.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-get-if-names" role="function">libnd_misc_get_if_names ()</title>
<indexterm><primary>libnd_misc_get_if_names</primary></indexterm><programlisting><link linkend="GList">GList</link>*      libnd_misc_get_if_names         (<link linkend="int">int</link> flags);</programlisting>
<para>
The function returns an alphabetically ordered glib list of strings containing
the names of those network interfaces that satisfy the given flag combination.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>flags</parameter>&nbsp;:</term>
<listitem><simpara> flags the interface must have set (IFF_xxx values, see net/if.h).
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> list of strings. You need to free this list and its entries if you
don't need the result any more.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-get-if-mtu" role="function">libnd_misc_get_if_mtu ()</title>
<indexterm><primary>libnd_misc_get_if_mtu</primary></indexterm><programlisting><link linkend="int">int</link>         libnd_misc_get_if_mtu           (const <link linkend="char">char</link> *ifname);</programlisting>
<para>
The function returns the MTU for a given interface.
I have no idea whether this compiles on anything non-Linux ...</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>ifname</parameter>&nbsp;:</term>
<listitem><simpara> name of interface to query.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara>


</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-get-hardware-string" role="function">libnd_misc_get_hardware_string ()</title>
<indexterm><primary>libnd_misc_get_hardware_string</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_misc_get_hardware_string  (<link linkend="char">char</link> *str,
                                             <link linkend="guint">guint</link> str_len,
                                             <link linkend="guchar">guchar</link> *address,
                                             <link linkend="guint">guint</link> addr_len);</programlisting>
<para>
The function places into the space pointed to by <parameter>str</parameter>
a string representing the hardware <parameter>address</parameter> as "xx : xx : ... : xx".</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>str</parameter>&nbsp;:</term>
<listitem><simpara> pointer to space filled with string.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>str_len</parameter>&nbsp;:</term>
<listitem><simpara> available string length.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>address</parameter>&nbsp;:</term>
<listitem><simpara> hardware address data.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>addr_len</parameter>&nbsp;:</term>
<listitem><simpara> length of hardware address in bytes.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-get-unnamed-string" role="function">libnd_misc_get_unnamed_string ()</title>
<indexterm><primary>libnd_misc_get_unnamed_string</primary></indexterm><programlisting><link linkend="char">char</link>*       libnd_misc_get_unnamed_string   (void);</programlisting>
<para>
The function returns a pointer to statically allocated data
that gets filled with a numbered dummy file name. You need
to <link linkend="strdup"><function>strdup()</function></link> the pointer if you want to keep it around.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> new filename.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-timeval-to-string" role="function">libnd_misc_timeval_to_string ()</title>
<indexterm><primary>libnd_misc_timeval_to_string</primary></indexterm><programlisting><link linkend="char">char</link>*       libnd_misc_timeval_to_string    (struct <link linkend="bpf-timeval">bpf_timeval</link> *tv);</programlisting>
<para>
The function returns a static string representing <parameter>tv</parameter> as a
time interval in the form of, for example, "2 days, 15:26:32:978560".</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tv</parameter>&nbsp;:</term>
<listitem><simpara> timeval to print string for.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> ASCII version of time interval <parameter>tv</parameter>.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-memdup" role="function">libnd_misc_memdup ()</title>
<indexterm><primary>libnd_misc_memdup</primary></indexterm><programlisting><link linkend="guchar">guchar</link>*     libnd_misc_memdup               (const <link linkend="guchar">guchar</link> *data,
                                             <link linkend="guint">guint</link> data_len);</programlisting>
<para>
The function allocates a chunk of memory of size <parameter>data_len</parameter>,
and then copies <parameter>data_len</parameter> bytes over from <parameter>data</parameter> into the newly
allocated memory region.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>data</parameter>&nbsp;:</term>
<listitem><simpara> input data.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>data_len</parameter>&nbsp;:</term>
<listitem><simpara> number of bytes to copy.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> new memory chunk, or <link linkend="NULL:CAPS"><literal>NULL</literal></link> if allocation failed.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-ctime" role="function">libnd_misc_ctime ()</title>
<indexterm><primary>libnd_misc_ctime</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_misc_ctime                (const struct <link linkend="bpf-timeval">bpf_timeval</link> *tv,
                                             <link linkend="char">char</link> *buf,
                                             <link linkend="int">int</link> buflen,
                                             <link linkend="gboolean">gboolean</link> fix_gmt,
                                             <link linkend="gboolean">gboolean</link> add_usec);</programlisting>
<para>
The function is similar to ctime_r(3). <parameter>fix_gmt</parameter> includes the local divergence
from GMT, and <parameter>add_usec</parameter> includes the microseconds in the timestamp.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tv</parameter>&nbsp;:</term>
<listitem><simpara> timestamp to convert.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>buf</parameter>&nbsp;:</term>
<listitem><simpara> buffer to hold result.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>buflen</parameter>&nbsp;:</term>
<listitem><simpara> length of <parameter>buf</parameter> in bytes.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>fix_gmt</parameter>&nbsp;:</term>
<listitem><simpara> whether to keep time local or make it relative to GMT.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>add_usec</parameter>&nbsp;:</term>
<listitem><simpara> whether to include the microseconds of <parameter>tv</parameter> in the output.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-get-gmt-deviation" role="function">libnd_misc_get_gmt_deviation ()</title>
<indexterm><primary>libnd_misc_get_gmt_deviation</primary></indexterm><programlisting><link linkend="int">int</link>         libnd_misc_get_gmt_deviation    (void);</programlisting>
<para>
The function returns the number of seconds our local time deviates from GMT.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> deviation in seconds.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-misc-get-tmpfile" role="function">libnd_misc_get_tmpfile ()</title>
<indexterm><primary>libnd_misc_get_tmpfile</primary></indexterm><programlisting><link linkend="char">char</link>*       libnd_misc_get_tmpfile          (const <link linkend="char">char</link> *filename);</programlisting>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>filename</parameter>&nbsp;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara>


</simpara></listitem></varlistentry>
</variablelist></refsect2>

</refsect1>




</refentry>
