]> git.sesse.net Git - vlc/blobdiff - src/misc/variables.c
cpu: fix a typo and cpu detection on Mac OS.
[vlc] / src / misc / variables.c
index 17f45a5e73059dfe8b4b6ae58901a6a910d9f1cc..9df5a40079c08e2a64309c0efc08973c63362d9a 100644 (file)
@@ -49,12 +49,21 @@ struct callback_entry_t
 /*****************************************************************************
  * Local comparison functions, returns 0 if v == w, < 0 if v < w, > 0 if v > w
  *****************************************************************************/
-static int CmpBool( vlc_value_t v, vlc_value_t w ) { return v.b_bool ? w.b_bool ? 0 : 1 : w.b_bool ? -1 : 0; }
-static int CmpInt( vlc_value_t v, vlc_value_t w ) { return v.i_int == w.i_int ? 0 : v.i_int > w.i_int ? 1 : -1; }
+static int CmpBool( vlc_value_t v, vlc_value_t w )
+{
+    return v.b_bool ? w.b_bool ? 0 : 1 : w.b_bool ? -1 : 0;
+}
+
+static int CmpInt( vlc_value_t v, vlc_value_t w )
+{
+    return v.i_int == w.i_int ? 0 : v.i_int > w.i_int ? 1 : -1;
+}
+
 static int CmpTime( vlc_value_t v, vlc_value_t w )
 {
     return v.i_time == w.i_time ? 0 : v.i_time > w.i_time ? 1 : -1;
 }
+
 static int CmpString( vlc_value_t v, vlc_value_t w )
 {
     if( !v.psz_string )
@@ -148,7 +157,8 @@ int_ops    = { CmpInt,     DupDummy,  FreeDummy,  },
 list_ops   = { CmpAddress, DupList,   FreeList,   },
 mutex_ops  = { CmpAddress, DupDummy,  FreeMutex,  },
 string_ops = { CmpString,  DupString, FreeString, },
-time_ops   = { CmpTime,    DupDummy,  FreeDummy,  };
+time_ops   = { CmpTime,    DupDummy,  FreeDummy,  },
+coords_ops = { NULL,       DupDummy,  FreeDummy,  };
 
 /*****************************************************************************
  * Local prototypes
@@ -262,6 +272,10 @@ int var_Create( vlc_object_t *p_this, const char *psz_name, int i_type )
             p_var->ops = &time_ops;
             p_var->val.i_time = 0;
             break;
+        case VLC_VAR_COORDS:
+            p_var->ops = &coords_ops;
+            p_var->val.coords.x = p_var->val.coords.y = 0;
+            break;
         case VLC_VAR_ADDRESS:
             p_var->ops = &addr_ops;
             p_var->val.p_address = NULL;
@@ -278,7 +292,7 @@ int var_Create( vlc_object_t *p_this, const char *psz_name, int i_type )
         default:
             p_var->ops = &void_ops;
 #ifndef NDEBUG
-            if( i_type & VLC_VAR_CLASS  != VLC_VAR_VOID )
+            if( (i_type & VLC_VAR_CLASS) != VLC_VAR_VOID )
                 msg_Err( p_this, "Creating the variable '%s' without a type",
                           psz_name );
 #endif
@@ -634,13 +648,14 @@ int var_Change( vlc_object_t *p_this, const char *psz_name,
  * \return vlc error codes
  */
 int var_GetAndSet( vlc_object_t *p_this, const char *psz_name, int i_action,
-                   vlc_value_t val )
+                   vlc_value_t *p_val )
 {
     int i_ret;
     variable_t *p_var;
     vlc_value_t oldval;
 
     assert( p_this );
+    assert( p_val );
 
     vlc_object_internals_t *p_priv = vlc_internals( p_this );
 
@@ -663,13 +678,21 @@ int var_GetAndSet( vlc_object_t *p_this, const char *psz_name, int i_action,
     /* depending of the action requiered */
     switch( i_action )
     {
-    case VLC_VAR_TOGGLE_BOOL:
+    case VLC_VAR_BOOL_TOGGLE:
         assert( ( p_var->i_type & VLC_VAR_BOOL ) == VLC_VAR_BOOL );
         p_var->val.b_bool = !p_var->val.b_bool;
         break;
-    case VLC_VAR_INTEGER_INCDEC:
+    case VLC_VAR_INTEGER_ADD:
         assert( ( p_var->i_type & VLC_VAR_INTEGER ) == VLC_VAR_INTEGER );
-        p_var->val.i_int += val.i_int;
+        p_var->val.i_int += p_val->i_int;
+        break;
+    case VLC_VAR_INTEGER_OR:
+        assert( ( p_var->i_type & VLC_VAR_INTEGER ) == VLC_VAR_INTEGER );
+        p_var->val.i_int |= p_val->i_int;
+        break;
+    case VLC_VAR_INTEGER_NAND:
+        assert( ( p_var->i_type & VLC_VAR_INTEGER ) == VLC_VAR_INTEGER );
+        p_var->val.i_int &= ~p_val->i_int;
         break;
     default:
         vlc_mutex_unlock( &p_priv->var_lock );
@@ -678,6 +701,7 @@ int var_GetAndSet( vlc_object_t *p_this, const char *psz_name, int i_action,
 
     /*  Check boundaries */
     CheckValue( p_var, &p_var->val );
+    *p_val = p_var->val;
 
     /* Deal with callbacks.*/
     i_ret = TriggerCallback( p_this, p_var, psz_name, oldval );
@@ -715,6 +739,7 @@ int var_Type( vlc_object_t *p_this, const char *psz_name )
     return i_type;
 }
 
+#undef var_SetChecked
 int var_SetChecked( vlc_object_t *p_this, const char *psz_name,
                     int expected_type, vlc_value_t val )
 {
@@ -737,6 +762,12 @@ int var_SetChecked( vlc_object_t *p_this, const char *psz_name,
 
     assert( expected_type == 0 ||
             (p_var->i_type & VLC_VAR_CLASS) == expected_type );
+#ifndef NDEBUG
+        /* Alert if the type is VLC_VAR_VOID */
+        if( ( p_var->i_type & VLC_VAR_TYPE ) == VLC_VAR_VOID )
+            msg_Warn( p_this, "Calling var_Set on the void variable '%s' (0x%04x)", psz_name, p_var->i_type );
+#endif
+
 
     WaitUnused( p_this, p_var );
 
@@ -776,6 +807,7 @@ int var_Set( vlc_object_t *p_this, const char *psz_name, vlc_value_t val )
     return var_SetChecked( p_this, psz_name, 0, val );
 }
 
+#undef var_GetChecked
 int var_GetChecked( vlc_object_t *p_this, const char *psz_name,
                     int expected_type, vlc_value_t *p_val )
 {
@@ -799,7 +831,7 @@ int var_GetChecked( vlc_object_t *p_this, const char *psz_name,
 #ifndef NDEBUG
         /* Alert if the type is VLC_VAR_VOID */
         if( ( p_var->i_type & VLC_VAR_TYPE ) == VLC_VAR_VOID )
-            msg_Warn( p_this, "Calling var_GetVoid on the void variable '%s' (0x%04x)", psz_name, p_var->i_type );
+            msg_Warn( p_this, "Calling var_Get on the void variable '%s' (0x%04x)", psz_name, p_var->i_type );
 #endif
 
         /* Duplicate value if needed */