예제 #1
0
wi_boolean_t _wi_settings_set_path(wi_settings_t *settings, uint32_t index, wi_string_t *name, wi_string_t *value) {
	wi_string_t		**string = (wi_string_t **) settings->spec[index].setting;
	
	if(*string)
		wi_release(*string);

	if(wi_string_has_prefix(value, WI_STR("/")))
		*string = wi_retain(value);
	else if(settings->chroot)
		*string = wi_string_init_with_format(wi_string_alloc(), WI_STR("/%@"), value);
	else
		*string = wi_string_init_with_format(wi_string_alloc(), WI_STR("%@/%@"), wi_root_path, value);

	wi_string_normalize_path(*string);
	
	return true;
}
예제 #2
0
wi_string_t * wi_error_string(void) {
	wi_error_t		*error;

	error = _wi_error_get_error();

	if(!error->string) {
		switch(error->domain) {
			case WI_ERROR_DOMAIN_ERRNO:
				error->string = wi_string_init_with_cstring(wi_string_alloc(), strerror(error->code));
				break;

			case WI_ERROR_DOMAIN_GAI:
				error->string = wi_string_init_with_cstring(wi_string_alloc(), gai_strerror(error->code));
				break;

			case WI_ERROR_DOMAIN_REGEX:
			case WI_ERROR_DOMAIN_OPENSSL:
			case WI_ERROR_DOMAIN_OPENSSL_SSL:
			case WI_ERROR_DOMAIN_COMMONCRYPTO:
			case WI_ERROR_DOMAIN_LIBXML2:
			case WI_ERROR_DOMAIN_SQLITE3:
				break;
			
			case WI_ERROR_DOMAIN_ZLIB:
#ifdef WI_ZLIB
				error->string = wi_string_init_with_format(wi_string_alloc(), WI_STR("zlib: %s"), zError(error->code));
#endif
				break;
			
			case WI_ERROR_DOMAIN_CARBON:
				error->string = wi_string_init_with_format(wi_string_alloc(), WI_STR("Carbon: %d"), error->code);
				break;

			case WI_ERROR_DOMAIN_LIBWIRED:
				error->string = wi_string_init_with_cstring(wi_string_alloc(), _wi_error_strings[error->code]);
				break;

			case WI_ERROR_DOMAIN_NONE:
				error->string = wi_string_init_with_format(wi_string_alloc(), WI_STR("Unknown error domain: %d"), error->code);
				break;
		}
	}

	return error->string;
}
예제 #3
0
파일: version.c 프로젝트: ProfDrLuigi/zanka
void wd_version_init(void) {
	wd_version_string			= wi_string_init_with_format(wi_string_alloc(), WI_STR("%s (%u)"), WD_VERSION, WI_REVISION);
	wd_protocol_version_string	= wi_string_init_with_cstring(wi_string_alloc(), WD_PROTOCOL_VERSION);

#ifdef HAVE_CORESERVICES_CORESERVICES_H
	wd_server_version_string	= wi_string_init_with_format(wi_string_alloc(), WI_STR("Wired/%@ (%@; %@; %@) (%s; CoreFoundation %.1f)"),
		wd_version_string,
		wi_process_os_name(wi_process()),
		wi_process_os_release(wi_process()),
		wi_process_os_arch(wi_process()),
		SSLeay_version(SSLEAY_VERSION),
		kCFCoreFoundationVersionNumber);
#else
	wd_server_version_string	= wi_string_init_with_format(wi_string_alloc(), WI_STR("Wired/%@ (%@; %@; %@) (%s)"),
		wd_version_string,
		wi_process_os_name(wi_process()),
		wi_process_os_release(wi_process()),
		wi_process_os_arch(wi_process()),
		SSLeay_version(SSLEAY_VERSION));
#endif
}
예제 #4
0
void wi_error_set_openssl_error(void) {
	wi_error_t		*error;
	const char		*file;
	int				line;

	if(ERR_peek_error() == 0) {
		wi_error_set_errno(errno);
	} else {
		error = _wi_get_error();
		error->domain = WI_ERROR_DOMAIN_OPENSSL;
		error->code = ERR_get_error_line(&file, &line);
		
		wi_release(error->string);

		error->string = wi_string_init_with_format(wi_string_alloc(), WI_STR("%s:%d: %s: %s (%u)"),
			file,
			line,
			ERR_func_error_string(error->code),
			ERR_reason_error_string(error->code),
			ERR_GET_REASON(error->code));
	}
}
예제 #5
0
파일: wi-url.c 프로젝트: ProfDrLuigi/zanka
void _wi_url_regenerate_string(wi_url_t *url) {
	wi_release(url->string);
	
	url->string = wi_string_init_with_format(wi_mutable_string_alloc(), WI_STR("%#@://"), url->scheme);
	
	if(url->user && wi_string_length(url->user) > 0) {
		wi_mutable_string_append_format(url->string, WI_STR("%#@"), url->user);
		
		if(url->password && wi_string_length(url->password) > 0)
			wi_mutable_string_append_format(url->string, WI_STR(":%#@"), url->password);
	
		wi_mutable_string_append_string(url->string, WI_STR("@"));
	}
	wi_mutable_string_append_format(url->string, WI_STR("%#@"), url->host);
	
	if(url->port > 0)
		wi_mutable_string_append_format(url->string, WI_STR(":%lu"), url->port);
	
	if(url->path)
		wi_mutable_string_append_string(url->string, url->path);
	else
		wi_mutable_string_append_string(url->string, WI_STR("/"));
}
예제 #6
0
static wi_string_t * _wi_p7_message_description(wi_runtime_instance_t *instance) {
	wi_p7_message_t		*p7_message = instance;
	wi_hash_t			*fields;
	wi_enumerator_t		*enumerator;
	wi_string_t			*description, *xml_string, *field_name;
	
	description = wi_string_init_with_format(wi_string_alloc(), WI_STR("<%@ %p>{name = %@, serialization = %@"),
        wi_runtime_class_name(p7_message),
        p7_message,
		p7_message->name,
		p7_message->serialization == WI_P7_BINARY ? WI_STR("binary") : WI_STR("xml"));
	
	if(p7_message->serialization == WI_P7_BINARY) {
		wi_string_append_format(description, WI_STR(", buffer = %@, fields = (\n"),
			wi_data_with_bytes_no_copy(p7_message->binary_buffer, p7_message->binary_size, false));
	} else {
		if(p7_message->xml_string)
			xml_string = p7_message->xml_string;
		else
			xml_string = wi_string_with_bytes(p7_message->xml_buffer, p7_message->xml_length);
			
		wi_string_append_format(description, WI_STR(", xml = \"%@\", fields = (\n"),
			xml_string);
	}
	
	fields = wi_p7_message_fields(p7_message);
	enumerator = wi_hash_key_enumerator(fields);
	
	while((field_name = wi_enumerator_next_data(enumerator))) {
		wi_string_append_format(description, WI_STR("    %@ = %@\n"),
			field_name, wi_hash_data_for_key(fields, field_name));
	}

	wi_string_append_string(description, WI_STR(")}"));
	
	return wi_autorelease(description);
}