*****************************************************************************
* Copyright (C) 2005 the VideoLAN team
*
- * $Id: core.c 14187 2006-02-07 16:37:40Z courmisch $
+ * $Id$
*
* Authors: Damien Fouilleul <damienf@videolan.org>
*
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
-#include <libvlc_internal.h>
+#include "libvlc_internal.h"
#include <vlc/libvlc.h>
struct libvlc_log_t
{
- const libvlc_instance_t *p_instance;
+ libvlc_instance_t *p_instance;
msg_subscription_t *p_messages;
};
RAISEVOID("Invalid VLC instance!");
}
-libvlc_log_t *libvlc_log_open( const libvlc_instance_t *p_instance, libvlc_exception_t *p_e )
+libvlc_log_t *libvlc_log_open( libvlc_instance_t *p_instance, libvlc_exception_t *p_e )
{
-
struct libvlc_log_t *p_log =
(struct libvlc_log_t *)malloc(sizeof(struct libvlc_log_t));
p_log->p_instance = p_instance;
p_log->p_messages = msg_Subscribe(p_instance->p_libvlc_int, MSG_QUEUE_NORMAL);
- if( !p_log->p_messages ) RAISENULL( "Out of memory" );
+ if( !p_log->p_messages )
+ {
+ free( p_log );
+ RAISENULL( "Out of memory" );
+ }
+ libvlc_retain( p_instance );
return p_log;
}
if( p_log && p_log->p_messages )
{
msg_Unsubscribe(p_log->p_instance->p_libvlc_int, p_log->p_messages);
+ libvlc_release( p_log->p_instance );
free(p_log);
}
else
{
int i_start = p_log->p_messages->i_start;
int i_stop = *(p_log->p_messages->pi_stop);
-
- return i_stop - i_start % VLC_MSG_QSIZE;
+
+ if( i_stop >= i_start )
+ return i_stop-i_start;
+ else
+ return VLC_MSG_QSIZE-(i_start-i_stop);
}
RAISEZERO("Invalid log object!");
}