static void parse_managed_objects(GDBusClient *client, DBusMessage *msg) { DBusMessageIter iter, dict; if (dbus_message_iter_init(msg, &iter) == FALSE) return; if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY) return; dbus_message_iter_recurse(&iter, &dict); while (dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) { DBusMessageIter entry; const char *path; dbus_message_iter_recurse(&dict, &entry); if (dbus_message_iter_get_arg_type(&entry) != DBUS_TYPE_OBJECT_PATH) break; dbus_message_iter_get_basic(&entry, &path); dbus_message_iter_next(&entry); parse_interfaces(client, path, &entry); dbus_message_iter_next(&dict); } }
static gboolean interfaces_added(DBusConnection *conn, DBusMessage *msg, void *user_data) { GDBusClient *client = user_data; DBusMessageIter iter; const char *path; if (dbus_message_iter_init(msg, &iter) == FALSE) return TRUE; if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_OBJECT_PATH) return TRUE; dbus_message_iter_get_basic(&iter, &path); dbus_message_iter_next(&iter); g_dbus_client_ref(client); parse_interfaces(client, path, &iter); g_dbus_client_unref(client); return TRUE; }
int conf_loadfile( conf_t *conf, char *file ) { int i, line = 0; FILE *fp; char s[MAX_STRING], key[MAX_STRING], value[MAX_STRING]; fp = fopen( file, "r" ); if( fp == NULL ) return( 1 ); /* Not a real failure */ while( !feof( fp ) ) { int st; line ++; *s = 0; fscanf( fp, "%100[^\n#]s", s ); fscanf( fp, "%*[^\n]s" ); fgetc( fp ); /* Skip newline */ if( strchr( s, '=' ) == NULL ) continue; /* Probably empty? */ sscanf( s, "%[^= \t]s", key ); for( i = 0; s[i]; i ++ ) if( s[i] == '=' ) { for( i ++; isspace( (int) s[i] ) && s[i]; i ++ ); break; } strcpy( value, &s[i] ); for( i = strlen( value ) - 1; isspace( (int) value[i] ); i -- ) value[i] = 0; st = 0; /* Long live macros!! */ get_config_string( default_filename ); get_config_string( http_proxy ); get_config_string( no_proxy ); get_config_number( strip_cgi_parameters ); get_config_number( save_state_interval ); get_config_number( connection_timeout ); get_config_number( reconnect_delay ); get_config_number( num_connections ); get_config_number( buffer_size ); get_config_number( max_speed ); get_config_number( verbose ); get_config_number( alternate_output ); get_config_number( search_timeout ); get_config_number( search_threads ); get_config_number( search_amount ); get_config_number( search_top ); /* Option defunct but shouldn't be an error */ if( strcmp( key, "speed_type" ) == 0 ) st = 1; if( strcmp( key, "interfaces" ) == 0 ) st = parse_interfaces( conf, value ); if( !st ) { fprintf( stderr, _("Error in %s line %i.\n"), file, line ); return( 0 ); } } fclose( fp ); return( 1 ); }