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__PACKAGE_H
00024 #define DEBIAN_INSTALLER__PACKAGE_H
00025
00026 #include <debian-installer/mem.h>
00027 #include <debian-installer/parser.h>
00028 #include <debian-installer/slist.h>
00029 #include <debian-installer/string.h>
00030
00031 typedef struct di_package di_package;
00032 typedef struct di_package_dependency di_package_dependency;
00033 typedef struct di_package_version di_package_version;
00034
00035 typedef enum di_package_dependency_type di_package_dependency_type;
00036 typedef enum di_package_priority di_package_priority;
00037 typedef enum di_package_status di_package_status;
00038 typedef enum di_package_status_want di_package_status_want;
00039 typedef enum di_package_type di_package_type;
00040
00041 #include <debian-installer/packages.h>
00042
00051 enum di_package_priority
00052 {
00053 di_package_priority_extra = 1,
00054 di_package_priority_optional,
00055 di_package_priority_standard,
00056 di_package_priority_important,
00057 di_package_priority_required,
00058 };
00059
00063 enum di_package_status
00064 {
00065 di_package_status_undefined = 0,
00066 di_package_status_not_installed,
00067 di_package_status_unpacked,
00068 di_package_status_installed,
00069 di_package_status_half_configured,
00070 di_package_status_config_files,
00071 };
00072
00076 enum di_package_status_want
00077 {
00078 di_package_status_want_unknown = 0,
00079 di_package_status_want_install,
00080 di_package_status_want_hold,
00081 di_package_status_want_deinstall,
00082 di_package_status_want_purge,
00083 };
00084
00088 enum di_package_type
00089 {
00090 di_package_type_non_existent = 0,
00091 di_package_type_virtual_package,
00092 di_package_type_real_package,
00093 };
00094
00098 struct di_package
00099 {
00100 union
00101 {
00102 char *package;
00103 di_rstring key;
00104 };
00105 di_package_type type;
00106 di_package_status_want status_want;
00107 di_package_status status;
00108 int essential;
00109 di_package_priority priority;
00110 char *section;
00111 int installed_size;
00112 char *maintainer;
00113 char *architecture;
00114 char *version;
00115 di_slist depends;
00116 char *filename;
00117 size_t size;
00118 char *md5sum;
00119 char *short_description;
00120 char *description;
00121 unsigned int resolver;
00122 };
00123
00127 enum di_package_dependency_type
00128 {
00129 di_package_dependency_type_replaces = 1,
00130 di_package_dependency_type_provides,
00131 di_package_dependency_type_depends,
00132 di_package_dependency_type_pre_depends,
00133 di_package_dependency_type_recommends,
00134 di_package_dependency_type_suggests,
00135 di_package_dependency_type_conflicts,
00136 di_package_dependency_type_enhances,
00137 di_package_dependency_type_reverse_provides = 0x100,
00138 di_package_dependency_type_reverse_enhances,
00139 };
00140
00144 struct di_package_dependency
00145 {
00146 di_package_dependency_type type;
00147 di_package *ptr;
00148 };
00149
00153 struct di_package_version
00154 {
00155 unsigned long epoch;
00156 char *upstream;
00157 char *debian_revision;
00158 };
00159
00160 void di_package_destroy (di_package *package);
00161
00162 static inline di_package *di_package_alloc (di_packages_allocator *allocator)
00163 {
00164 return di_mem_chunk_alloc0 (allocator->package_mem_chunk);
00165 }
00166
00167 static inline di_package_dependency *di_package_dependency_alloc (di_packages_allocator *allocator)
00168 {
00169 return di_mem_chunk_alloc0 (allocator->package_dependency_mem_chunk);
00170 }
00171
00172 void di_package_version_free (di_package_version *version);
00173
00174 int di_package_version_compare (const di_package_version *a, const di_package_version *b);
00175 di_package_version *di_package_version_parse (di_package *package);
00176
00177 extern const char *const di_package_priority_text[];
00178 extern const char *const di_package_status_want_text[];
00179 extern const char *const di_package_status_text[];
00180
00181 int di_package_array_text_from (const char *const *array, const char *text);
00182
00183 static inline di_package_priority di_package_priority_text_from (const char *text)
00184 {
00185 return di_package_array_text_from (di_package_priority_text, text);
00186 }
00187
00188 static inline di_package_status_want di_package_status_want_text_from (const char *text)
00189 {
00190 return di_package_array_text_from (di_package_status_want_text, text);
00191 }
00192
00193 static inline di_package_status di_package_status_text_from (const char *text)
00194 {
00195 return di_package_array_text_from (di_package_status_text, text);
00196 }
00197
00198 static inline const char *di_package_priority_text_to (const di_package_priority priority)
00199 {
00200 return di_package_priority_text[priority];
00201 }
00202
00203 static inline const char *di_package_status_want_text_to (const di_package_status_want status)
00204 {
00205 return di_package_status_want_text[status];
00206 }
00207
00208 static inline const char *di_package_status_text_to (const di_package_status status)
00209 {
00210 return di_package_status_text[status];
00211 }
00212
00220 di_parser_fields_function_read
00224 di_package_parser_read_dependency,
00228 di_package_parser_read_description,
00232 di_package_parser_read_priority,
00236 di_package_parser_read_status;
00237
00238 di_parser_fields_function_write
00242 di_package_parser_write_dependency,
00246 di_package_parser_write_description,
00250 di_package_parser_write_priority,
00254 di_package_parser_write_status;
00255
00259 extern const di_parser_fieldinfo *di_package_parser_fieldinfo[];
00260
00265 di_parser_info *di_package_parser_info (void);
00266
00274 di_package *di_package_special_read_file (const char *file, di_packages *packages, di_packages_allocator *allocator, di_parser_info *(info) (void));
00275
00283 static inline di_package *di_package_read_file (const char *file, di_packages *packages, di_packages_allocator *allocator)
00284 {
00285 return di_package_special_read_file (file, packages, allocator, di_package_parser_info);
00286 }
00287
00289 #endif