00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef DEBIAN_INSTALLER__PARSER_H
00024 #define DEBIAN_INSTALLER__PARSER_H
00025
00026 #include <debian-installer/hash.h>
00027 #include <debian-installer/slist.h>
00028 #include <debian-installer/string.h>
00029
00030 #include <stdbool.h>
00031 #include <stdio.h>
00032 #include <stdlib.h>
00033 #include <string.h>
00034
00035 typedef struct di_parser_info di_parser_info;
00036 typedef struct di_parser_fieldinfo di_parser_fieldinfo;
00037
00052 typedef void di_parser_fields_function_read (void **data, const di_parser_fieldinfo *fip, di_rstring *field_modifier, di_rstring *value, void *user_data);
00053
00061 typedef void di_parser_fields_function_write_callback (const di_rstring *field, const di_rstring *value, void *data);
00062
00073 typedef void di_parser_fields_function_write (void **data, const di_parser_fieldinfo *fip, di_parser_fields_function_write_callback callback, void *callback_data, void *user_data);
00074
00079 typedef void *di_parser_read_entry_new (void *user_data);
00080
00085 typedef int di_parser_read_entry_finish (void *data, void *user_data);
00086
00091 typedef void *di_parser_write_entry_next (void **state_data, void *user_data);
00092
00096 struct di_parser_info
00097 {
00098 di_hash_table *table;
00099 di_slist list;
00100 bool modifier;
00101 bool wildcard;
00102 };
00103
00107 struct di_parser_fieldinfo
00108 {
00109 di_rstring key;
00110 di_parser_fields_function_read *read;
00111 di_parser_fields_function_write *write;
00112 unsigned int integer;
00114 };
00115
00119 #define DI_PARSER_FIELDINFO(name, read, write, integer) \
00120 { { name, sizeof (name) - 1 }, read, write, integer }
00121
00122 di_parser_fields_function_read
00126 di_parser_read_boolean,
00130 di_parser_read_int,
00134 di_parser_read_rstring,
00138 di_parser_read_string;
00139
00140 di_parser_fields_function_write
00144 di_parser_write_boolean,
00148 di_parser_write_int,
00152 di_parser_write_rstring,
00156 di_parser_write_string;
00157
00158 di_parser_info *di_parser_info_alloc (void);
00159 void di_parser_info_free (di_parser_info *info);
00160
00161 void di_parser_info_add (di_parser_info *info, const di_parser_fieldinfo *fieldinfo[]);
00162
00164 #endif