MINOR: init: add 51Degrees initialisation code

This creates a dataset using the file given in global._51d_data_file_path.
diff --git a/src/haproxy.c b/src/haproxy.c
index 7413d65..ecdf206 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -115,6 +115,10 @@
 #include <import/da.h>
 #endif
 
+#ifdef USE_51DEGREES
+#include <51Degrees.h>
+#endif
+
 /*********************************************************************/
 
 extern const struct comp_algo comp_algos[];
@@ -382,6 +386,10 @@
 #if defined(CONFIG_HAP_NS)
 	printf("Built with network namespace support\n");
 #endif
+
+#ifdef USE_51DEGREES
+	printf("Built with 51Degrees support\n");
+#endif
 	putchar('\n');
 
 	list_pollers(stdout);
@@ -537,6 +545,12 @@
 	char *progname;
 	char *change_dir = NULL;
 	struct tm curtime;
+#ifdef USE_51DEGREES
+	int i = 0;
+	struct _51d_property_names *name;
+	fiftyoneDegreesDataSetInitStatus _51d_dataset_status;
+	char **_51d_property_list;
+#endif
 
 	chunk_init(&trash, malloc(global.tune.bufsize), global.tune.bufsize);
 	alloc_trash_buffers(global.tune.bufsize);
@@ -1083,6 +1097,44 @@
 
 	if (!hlua_post_init())
 		exit(1);
+
+#ifdef USE_51DEGREES
+	i = 0;
+	list_for_each_entry(name, &global._51d_property_names, list)
+		++i;
+	_51d_property_list = calloc(i, sizeof(char *));
+
+	i = 0;
+	list_for_each_entry(name, &global._51d_property_names, list)
+		_51d_property_list[i++] = name->name;
+
+	_51d_dataset_status = fiftyoneDegreesInitWithPropertyArray(global._51d_data_file_path, &global._51d_data_set, _51d_property_list, i);
+	free(_51d_property_list);
+	chunk_reset(&trash);
+	switch (_51d_dataset_status) {
+		case DATA_SET_INIT_STATUS_SUCCESS:
+			break;
+		case DATA_SET_INIT_STATUS_INSUFFICIENT_MEMORY:
+			chunk_printf(&trash, "Insufficient memory.");
+			break;
+		case DATA_SET_INIT_STATUS_CORRUPT_DATA:
+			chunk_printf(&trash, "Corrupt data.");
+			break;
+		case DATA_SET_INIT_STATUS_INCORRECT_VERSION:
+			chunk_printf(&trash, "Incorrect version.");
+			break;
+		case DATA_SET_INIT_STATUS_FILE_NOT_FOUND:
+			chunk_printf(&trash, "File not found.");
+			break;
+	}
+	if (_51d_dataset_status != DATA_SET_INIT_STATUS_SUCCESS) {
+		if (trash.len)
+			Alert("51D Setup - Error reading 51Degrees data file: %s\n", trash.str);
+		else
+			Alert("51D Setup - Error reading 51Degrees data file.\n");
+		exit(1);
+	}
+#endif
 }
 
 static void deinit_acl_cond(struct acl_cond *cond)