/** Memory leak checks.
*/
-//#define _MLT_PROPERTY_CHECKS_
+//#define _MLT_PROPERTY_CHECKS_ 2
#ifdef _MLT_PROPERTY_CHECKS_
static int properties_created = 0;
/** Load properties from a file.
*/
-mlt_properties mlt_properties_load( char *filename )
+mlt_properties mlt_properties_load( const char *filename )
{
// Construct a standalone properties object
mlt_properties this = mlt_properties_new( );
return this;
}
-static inline int generate_hash( char *name )
+static inline int generate_hash( const char *name )
{
int hash = 0;
int i = 1;
real producer.
*/
-static inline void mlt_properties_do_mirror( mlt_properties this, char *name )
+static inline void mlt_properties_do_mirror( mlt_properties this, const char *name )
{
property_list *list = this->local;
if ( list->mirror != NULL )
/** Pass all properties from 'that' that match the prefix to 'this' (excluding the prefix).
*/
-int mlt_properties_pass( mlt_properties this, mlt_properties that, char *prefix )
+int mlt_properties_pass( mlt_properties this, mlt_properties that, const char *prefix )
{
int count = mlt_properties_count( that );
int length = strlen( prefix );
/** Locate a property by name
*/
-static inline mlt_property mlt_properties_find( mlt_properties this, char *name )
+static inline mlt_property mlt_properties_find( mlt_properties this, const char *name )
{
property_list *list = this->local;
mlt_property value = NULL;
/** Add a new property.
*/
-static mlt_property mlt_properties_add( mlt_properties this, char *name )
+static mlt_property mlt_properties_add( mlt_properties this, const char *name )
{
property_list *list = this->local;
int key = generate_hash( name );
if ( list->count == list->size )
{
list->size += 50;
- list->name = realloc( list->name, list->size * sizeof( char * ) );
+ list->name = realloc( list->name, list->size * sizeof( const char * ) );
list->value = realloc( list->value, list->size * sizeof( mlt_property ) );
}
/** Fetch a property by name - this includes add if not found.
*/
-static mlt_property mlt_properties_fetch( mlt_properties this, char *name )
+static mlt_property mlt_properties_fetch( mlt_properties this, const char *name )
{
// Try to find an existing property first
mlt_property property = mlt_properties_find( this, name );
/** Set the property.
*/
-int mlt_properties_set( mlt_properties this, char *name, char *value )
+int mlt_properties_set( mlt_properties this, const char *name, const char *value )
{
int error = 1;
mlt_property property = mlt_properties_fetch( this, name );
// Set it if not NULL
- if ( property != NULL && ( value == NULL || value[ 0 ] != '@' ) )
+ if ( property == NULL )
+ {
+ fprintf( stderr, "Whoops - %s not found (should never occur)\n", name );
+ }
+ else if ( value == NULL )
+ {
+ error = mlt_property_set_string( property, value );
+ mlt_properties_do_mirror( this, name );
+ }
+ else if ( *value != '@' )
{
error = mlt_property_set_string( property, value );
mlt_properties_do_mirror( this, name );
}
- else if ( property != NULL && value[ 0 ] == '@' )
+ else if ( value[ 0 ] == '@' )
{
int total = 0;
int current = 0;
/** Set or default the property.
*/
-int mlt_properties_set_or_default( mlt_properties this, char *name, char *value, char *def )
+int mlt_properties_set_or_default( mlt_properties this, const char *name, const char *value, const char *def )
{
return mlt_properties_set( this, name, value == NULL ? def : value );
}
/** Get a string value by name.
*/
-char *mlt_properties_get( mlt_properties this, char *name )
+char *mlt_properties_get( mlt_properties this, const char *name )
{
mlt_property value = mlt_properties_find( this, name );
return value == NULL ? NULL : mlt_property_get_string( value );
/** Set a value by parsing a name=value string
*/
-int mlt_properties_parse( mlt_properties this, char *namevalue )
+int mlt_properties_parse( mlt_properties this, const char *namevalue )
{
char *name = strdup( namevalue );
char *value = NULL;
/** Get a value associated to the name.
*/
-int mlt_properties_get_int( mlt_properties this, char *name )
+int mlt_properties_get_int( mlt_properties this, const char *name )
{
mlt_property value = mlt_properties_find( this, name );
return value == NULL ? 0 : mlt_property_get_int( value );
/** Set a value associated to the name.
*/
-int mlt_properties_set_int( mlt_properties this, char *name, int value )
+int mlt_properties_set_int( mlt_properties this, const char *name, int value )
{
int error = 1;
/** Get a value associated to the name.
*/
-double mlt_properties_get_double( mlt_properties this, char *name )
+double mlt_properties_get_double( mlt_properties this, const char *name )
{
mlt_property value = mlt_properties_find( this, name );
return value == NULL ? 0 : mlt_property_get_double( value );
/** Set a value associated to the name.
*/
-int mlt_properties_set_double( mlt_properties this, char *name, double value )
+int mlt_properties_set_double( mlt_properties this, const char *name, double value )
{
int error = 1;
/** Get a value associated to the name.
*/
-mlt_position mlt_properties_get_position( mlt_properties this, char *name )
+mlt_position mlt_properties_get_position( mlt_properties this, const char *name )
{
mlt_property value = mlt_properties_find( this, name );
return value == NULL ? 0 : mlt_property_get_position( value );
/** Set a value associated to the name.
*/
-int mlt_properties_set_position( mlt_properties this, char *name, mlt_position value )
+int mlt_properties_set_position( mlt_properties this, const char *name, mlt_position value )
{
int error = 1;
/** Get a value associated to the name.
*/
-void *mlt_properties_get_data( mlt_properties this, char *name, int *length )
+void *mlt_properties_get_data( mlt_properties this, const char *name, int *length )
{
mlt_property value = mlt_properties_find( this, name );
return value == NULL ? NULL : mlt_property_get_data( value, length );
/** Set a value associated to the name.
*/
-int mlt_properties_set_data( mlt_properties this, char *name, void *value, int length, mlt_destructor destroy, mlt_serialiser serialise )
+int mlt_properties_set_data( mlt_properties this, const char *name, void *value, int length, mlt_destructor destroy, mlt_serialiser serialise )
{
int error = 1;
/** Rename a property.
*/
-int mlt_properties_rename( mlt_properties this, char *source, char *dest )
+int mlt_properties_rename( mlt_properties this, const char *source, const char *dest )
{
mlt_property value = mlt_properties_find( this, dest );
fprintf( output, "%s=%s\n", list->name[ i ], mlt_properties_get( this, list->name[ i ] ) );
}
-void mlt_properties_debug( mlt_properties this, char *title, FILE *output )
+void mlt_properties_debug( mlt_properties this, const char *title, FILE *output )
{
- fprintf( stderr, "%s: ", title );
+ fprintf( output, "%s: ", title );
if ( this != NULL )
{
property_list *list = this->local;
fprintf( output, ", %s=%p", list->name[ i ], mlt_properties_get_data( this, list->name[ i ], NULL ) );
fprintf( output, " ]" );
}
- fprintf( stderr, "\n" );
+ fprintf( output, "\n" );
}
/** Close the list.
property_list *list = this->local;
int index = 0;
-#ifdef _MLT_PROPERTY_CHECKS_
+#if _MLT_PROPERTY_CHECKS_ == 1
// Show debug info
mlt_properties_debug( this, "Closing", stderr );
+#endif
+#ifdef _MLT_PROPERTY_CHECKS_
// Increment destroyed count
properties_destroyed ++;