/*This function set the psz_vlcpath allocated on heap*/<br>static void set_libvlc_path (void)<br>{<br>    char drive[11]="C:\\sys\\bin";<br>    const char * letter;<br><br>    letter=GetConstPrivatePath();<br><br>
    drive[0]=*letter;<br>    free(letter);<br>    psz_vlcpath = strdup(drive);<br>}<br><br>/*This function frees the memory allocated in the last function*/<br>static void unset_libvlc_path (void)<br>{<br>    free (psz_vlcpath);<br>
}<br><br>/*This is a structure containing an already initialized Static mutex and refs = 0*/<br>static struct<br>{<br>    vlc_mutex_t lock;<br>    unsigned refs;<br>} once = { VLC_STATIC_MUTEX, 0 };<br><br><br>void system_Init (libvlc_int_t *libvlc, int *argc, const char *argv[])<br>
{<br>    ret = pthread_create( &threadid, NULL, ThreadController, &quit );    /*As the Libvlc starts this hreadcontroller starts running which quits cleaning all its resources only if quit=1*/<br><br>/*Increase refs and set libvlc path*/<br>
    vlc_mutex_lock ( &once.lock );<br>    if (once.refs++ == 0)<br>        set_libvlc_path ();<br>    vlc_mutex_unlock ( &once.lock );<br><br>    VLC_UNUSED(libvlc);<br>    VLC_UNUSED(argc);<br>    VLC_UNUSED(argv);<br>
}<br><br>void system_Configure (libvlc_int_t *libvlc,<br>                       int argc, const char *const argv[])<br>{<br>/*Nothing in configure*/<br>    VLC_UNUSED(libvlc);<br>    VLC_UNUSED(argc);<br>    VLC_UNUSED(argv);<br>
}<br><br>void system_End (libvlc_int_t *libvlc)<br>{<br>    quit=1;  /*quit becomes 1 ThreadController quits..we dont need to join as i am sure the thread never deadlocks ..You can see ThreadController() in patch 4*/<br><br>
    vlc_mutex_lock (&once.lock);<br>    if (--once.refs == 0)<br>        unset_libvlc_path ();<br>    vlc_mutex_unlock (&once.lock);<br><br>    VLC_UNUSED(libvlc);<br>}<br><br><br><br>/*Which part you did not understand*/<br>