Exemple #1
0
void wi_test_string_numeric_conversions(void) {
	WI_TEST_ASSERT_EQUALS(wi_string_bool(WI_STR("yes")), true, "");
	WI_TEST_ASSERT_EQUALS(wi_string_bool(WI_STR("no")), false, "");
	WI_TEST_ASSERT_EQUALS(wi_string_int32(WI_STR("2147483647")), 2147483647, "");
 	WI_TEST_ASSERT_EQUALS(wi_string_int32(WI_STR("2147483648")), 0, "");
	WI_TEST_ASSERT_EQUALS(wi_string_uint32(WI_STR("4294967295")), 4294967295U, "");
	WI_TEST_ASSERT_EQUALS(wi_string_uint32(WI_STR("4294967296")), 0U, "");
	WI_TEST_ASSERT_EQUALS(wi_string_int64(WI_STR("9223372036854775807")), 9223372036854775807LL, "");
	WI_TEST_ASSERT_EQUALS(wi_string_int64(WI_STR("9223372036854775808")), 0LL, "");
	WI_TEST_ASSERT_EQUALS(wi_string_uint64(WI_STR("18446744073709551615")), 18446744073709551615ULL, "");
	WI_TEST_ASSERT_EQUALS(wi_string_uint64(WI_STR("18446744073709551616")), 0ULL, "");

#ifdef WI_32
	WI_TEST_ASSERT_EQUALS(wi_string_integer(WI_STR("2147483647")), 2147483647, "");
	WI_TEST_ASSERT_EQUALS(wi_string_integer(WI_STR("2147483648")), 0, "");
	WI_TEST_ASSERT_EQUALS(wi_string_uinteger(WI_STR("4294967295")), 4294967295U, "");
	WI_TEST_ASSERT_EQUALS(wi_string_uinteger(WI_STR("4294967296")), 0U, "");
#else
	WI_TEST_ASSERT_EQUALS(wi_string_integer(WI_STR("9223372036854775807")), 9223372036854775807LL, "");
	WI_TEST_ASSERT_EQUALS(wi_string_integer(WI_STR("9223372036854775808")), 0LL, "");
	WI_TEST_ASSERT_EQUALS(wi_string_uinteger(WI_STR("18446744073709551615")), 18446744073709551615ULL, "");
	WI_TEST_ASSERT_EQUALS(wi_string_uinteger(WI_STR("18446744073709551616")), 0ULL, "");
#endif

	WI_TEST_ASSERT_EQUALS_WITH_ACCURACY(wi_string_float(WI_STR("3.40282346e38")), 3.40282346e38F, 0.0001, "");
	WI_TEST_ASSERT_EQUALS_WITH_ACCURACY(wi_string_float(WI_STR("3.40282347e38")), 0.0F, 0.0001, "");
	WI_TEST_ASSERT_EQUALS_WITH_ACCURACY(wi_string_double(WI_STR("1.7976931348623155e308")), 1.7976931348623155e308, 0.0001, "");
	WI_TEST_ASSERT_EQUALS_WITH_ACCURACY(wi_string_double(WI_STR("1.7976931348623160e308")), 0.0, 0.0001, "");
}
Exemple #2
0
static void wr_msg_304(wi_array_t *arguments) {
	wi_string_t		*nick;
	wr_user_t		*user;
	wr_uid_t		uid;

	uid = wi_string_uint32(WI_ARRAY(arguments, 0));
	user = wr_chat_user_with_uid(wr_public_chat, uid);

	if(user) {
		nick = WI_ARRAY(arguments, 4);
		
		if(!wi_is_equal(wr_user_nick(user), nick)) {
			wr_wprintf_prefix(wr_console_window, WI_STR("%@ is now known as %@"),
				wr_user_nick(user), nick);

			wr_user_set_nick(user, nick);
		}

		wr_user_set_idle(user, wi_string_bool(WI_ARRAY(arguments, 1)));
		wr_user_set_admin(user, wi_string_bool(WI_ARRAY(arguments, 2)));
		wr_user_set_status(user, WI_ARRAY(arguments, 5));
	}
}
Exemple #3
0
wi_boolean_t wi_p7_message_get_bool_for_name(wi_p7_message_t *p7_message, wi_p7_boolean_t *value, wi_string_t *field_name) {
	wi_string_t		*string;
	unsigned char	*binary;
	
	if(p7_message->serialization == WI_P7_BINARY) {
		if(!_wi_p7_message_get_binary_buffer_for_reading_for_name(p7_message, field_name, &binary, NULL))
			return false;
		
		*value = (binary[0] == 1) ? true : false;
	} else {
		string = _wi_p7_message_xml_value_for_name(p7_message, field_name);
		
		if(!string)
			return false;
		
		*value = wi_string_bool(string);
	}
	
	return true;
}
Exemple #4
0
void wi_p7_message_deserialize(wi_p7_message_t *p7_message, wi_p7_serialization_t serialization) {
	xmlDocPtr					doc;
	xmlNodePtr					root_node, field_node;
	wi_string_t					*field_name, *field_value;
	wi_p7_spec_message_t		*message;
	wi_p7_spec_field_t			*field;
	wi_uuid_t					*uuid;
	wi_date_t					*date;
	wi_data_t					*data;
	
	if(serialization == WI_P7_BINARY) {
		p7_message->binary_id = wi_read_swap_big_to_host_int32(p7_message->binary_buffer, 0);
		
		message = wi_p7_spec_message_with_id(p7_message->spec, p7_message->binary_id);
		
		if(message)
			p7_message->name = wi_retain(wi_p7_spec_message_name(message));
	} else {
		p7_message->binary_capacity	= _WI_P7_MESSAGE_BINARY_BUFFER_INITIAL_SIZE;
		p7_message->binary_buffer	= wi_malloc(p7_message->binary_capacity);
		p7_message->binary_size		= WI_P7_MESSAGE_BINARY_HEADER_SIZE;
		
		doc							= xmlParseDoc((xmlChar *) wi_string_cstring(p7_message->xml_string));
		root_node					= xmlDocGetRootElement(doc);
		
		if(root_node) {
			wi_p7_message_set_name(p7_message, wi_xml_node_attribute_with_name(root_node, WI_STR("name")));
			
			for(field_node = root_node->children; field_node != NULL; field_node = field_node->next) {
				if(field_node->type == XML_ELEMENT_NODE) {
					if(wi_is_equal(wi_xml_node_name(field_node), WI_STR("field"))) {
						field_name		= wi_xml_node_attribute_with_name(field_node, WI_STR("name"));
						field_value		= wi_xml_node_content(field_node);
						field			= wi_p7_spec_field_with_name(p7_message->spec, field_name);
						
						if(!field_name || !field_value || !field)
							continue;
						
						switch(wi_p7_spec_type_id(wi_p7_spec_field_type(field))) {
							case WI_P7_BOOL:
								wi_p7_message_set_bool_for_name(p7_message, wi_string_bool(field_value), field_name);
								break;
								
							case WI_P7_ENUM:
								wi_p7_message_set_enum_for_name(p7_message, wi_string_uint32(field_value), field_name);
								break;
								
							case WI_P7_INT32:
								wi_p7_message_set_int32_for_name(p7_message, wi_string_int32(field_value), field_name);
								break;
								
							case WI_P7_UINT32:
								wi_p7_message_set_uint32_for_name(p7_message, wi_string_uint32(field_value), field_name);
								break;
								
							case WI_P7_INT64:
								wi_p7_message_set_int64_for_name(p7_message, wi_string_int64(field_value), field_name);
								break;
								
							case WI_P7_UINT64:
								wi_p7_message_set_uint64_for_name(p7_message, wi_string_uint64(field_value), field_name);
								break;
								
							case WI_P7_DOUBLE:
								wi_p7_message_set_double_for_name(p7_message, wi_string_double(field_value), field_name);
								break;
								
							case WI_P7_STRING:
								wi_p7_message_set_string_for_name(p7_message, field_value, field_name);
								break;
								
							case WI_P7_UUID:
								uuid = wi_uuid_with_string(field_value);

								if(uuid)
									wi_p7_message_set_uuid_for_name(p7_message, uuid, field_name);
								break;
								
							case WI_P7_DATE:
								date = wi_date_with_rfc3339_string(field_value);
								
								if(date)
									wi_p7_message_set_date_for_name(p7_message, date, field_name);
								break;
								
							case WI_P7_DATA:
								data = wi_autorelease(wi_data_init_with_base64(wi_data_alloc(), field_value));
								
								if(data)
									wi_p7_message_set_data_for_name(p7_message, data, field_name);
								break;
							
							case WI_P7_OOBDATA:
								wi_p7_message_set_oobdata_for_name(p7_message, wi_string_uint64(field_value), field_name);
								break;
							
							case WI_P7_LIST:
								WI_ASSERT(0, "Can't deserialize XML with lists at the moment");
								break;
						}
					}
				}
			}
		}
		
		xmlFreeDoc(doc);
	}
}
Exemple #5
0
wi_boolean_t _wi_settings_set_bool(wi_settings_t *settings, uint32_t index, wi_string_t *name, wi_string_t *value) {
	*(wi_boolean_t *) settings->spec[index].setting = wi_string_bool(value);
	
	return true;
}
Exemple #6
0
static wi_runtime_instance_t * _wi_config_instance_for_setting(wi_config_t *config, wi_string_t *name, wi_string_t *value, wi_config_type_t *type) {
	struct passwd		*user;
	struct group		*group;
	struct servent		*servent;
	wi_uinteger_t		port;
	uint32_t			uid, gid;
	
	if(!wi_dictionary_contains_key(config->types, name)) {
		wi_error_set_libwired_error(WI_ERROR_SETTINGS_UNKNOWNSETTING);
		
		return NULL;
	}
	
	*type = wi_number_int32(wi_dictionary_data_for_key(config->types, name));
	
	switch(*type) {
		case WI_CONFIG_INTEGER:
			return wi_number_with_integer(wi_string_integer(value));
			break;
			
		case WI_CONFIG_BOOL:
			return wi_number_with_bool(wi_string_bool(value));
			break;
			
		case WI_CONFIG_STRING:
		case WI_CONFIG_STRINGLIST:
		case WI_CONFIG_PATH:
			return value;
			break;
			
		case WI_CONFIG_USER:
			user = getpwnam(wi_string_cstring(value));
			
			if(!user) {
				uid = wi_string_uint32(value);
				
				if(uid != 0 || wi_is_equal(value, WI_STR("0")))
					user = getpwuid(uid);
			}
			
			if(!user) {
				wi_error_set_libwired_error(WI_ERROR_SETTINGS_NOSUCHUSER);
				
				return NULL;
			}
			
			return wi_number_with_int32(user->pw_uid);
			break;
			
		case WI_CONFIG_GROUP:
			group = getgrnam(wi_string_cstring(value));
			
			if(!group) {
				gid = wi_string_uint32(value);
				
				if(gid != 0 || wi_is_equal(value, WI_STR("0")))
					group = getgrgid(gid);
			}
			
			if(!group) {
				wi_error_set_libwired_error(WI_ERROR_SETTINGS_NOSUCHGROUP);
				
				return NULL;
			}
			
			return wi_number_with_int32(group->gr_gid);
			break;
			
		case WI_CONFIG_PORT:
			port = wi_string_uinteger(value);
			
			if(port > 65535) {
				wi_error_set_libwired_error(WI_ERROR_SETTINGS_INVALIDPORT);
				
				return NULL;
			}
			
			if(port == 0) {
				servent = getservbyname(wi_string_cstring(value), "tcp");
				
				if(!servent) {
					wi_error_set_libwired_error(WI_ERROR_SETTINGS_NOSUCHSERVICE);
					
					return NULL;
				}
				
				port = servent->s_port;
			}
			
			return wi_number_with_int32(port);
			break;
			
		case WI_CONFIG_REGEXP:
			return wi_autorelease(wi_regexp_init_with_string(wi_regexp_alloc(), value));
			break;
			
		case WI_CONFIG_TIME_INTERVAL:
			return wi_number_with_double(wi_string_double(value));
			break;
	}
	
	return NULL;
}