00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __C_CREATEREPOLIB_MISC_H__
00021 #define __C_CREATEREPOLIB_MISC_H__
00022
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026
00027 #include <glib.h>
00028 #include <string.h>
00029 #include <curl/curl.h>
00030 #include "compression_wrapper.h"
00031
00039 #define CR_UNUSED(x) (void)(x)
00040
00043 #define CR_STATICSTRLEN(s) (sizeof(s)/sizeof(s[0]))
00044
00049 const char *cr_flag_to_str(gint64 flags);
00050
00053 struct cr_EVR {
00054 char *epoch;
00055 char *version;
00056 char *release;
00057 };
00058
00061 struct cr_NVREA {
00062 char *name;
00063 char *version;
00064 char *release;
00065 char *epoch;
00066 char *arch;
00067 };
00068
00072 struct cr_Version {
00073 long version;
00074 long release;
00075 long patch;
00076 char *suffix;
00077 };
00078
00079
00088 struct cr_EVR cr_str_to_evr(const char *string, GStringChunk *chunk);
00089
00095 static inline int cr_is_primary(const char *filename) {
00096 if (!strncmp(filename, "/etc/", 5))
00097 return 1;
00098 if (!strcmp(filename, "/usr/lib/sendmail"))
00099 return 1;
00100 if (strstr(filename, "bin/"))
00101 return 1;
00102 return 0;
00103 };
00104
00107 struct cr_HeaderRangeStruct {
00108 unsigned int start;
00109 unsigned int end;
00110 };
00111
00117 struct cr_HeaderRangeStruct cr_get_header_byte_range(const char *filename,
00118 GError **err);
00119
00125 char *cr_get_filename(const char *filepath);
00126
00135 int cr_download(CURL *handle,
00136 const char *url,
00137 const char *destination,
00138 GError **err);
00139
00146 int cr_copy_file(const char *src,
00147 const char *dst,
00148 GError **err);
00149
00159 #define cr_compress_file(SRC, DST, COMTYPE, ERR) \
00160 cr_compress_file_with_stat(SRC, DST, COMTYPE, NULL, ERR)
00161
00172 int cr_compress_file_with_stat(const char *src,
00173 const char *dst,
00174 cr_CompressionType comtype,
00175 cr_ContentStat *stat,
00176 GError **err);
00177
00184 int cr_better_copy_file(const char *src,
00185 const char *dst,
00186 GError **err);
00187
00193 int cr_remove_dir(const char *path, GError **err);
00194
00199 char *cr_normalize_dir_path(const char *path);
00200
00205 struct cr_Version cr_str_to_version(const char *str);
00206
00213 int cr_cmp_version_str(const char* str1, const char *str2);
00214
00221 void cr_null_log_fn(const gchar *log_domain,
00222 GLogLevelFlags log_level,
00223 const gchar *message,
00224 gpointer user_data);
00225
00232 void cr_log_fn(const gchar *log_domain,
00233 GLogLevelFlags log_level,
00234 const gchar *message,
00235 gpointer user_data);
00236
00244 void cr_slist_free_full(GSList *list, GDestroyNotify free_f);
00245
00250 struct cr_NVREA *cr_split_rpm_filename(const char *filename);
00251
00255 void cr_nvrea_free(struct cr_NVREA *nvrea);
00256
00262 #define cr_cmp_nvrea(A, B) (cr_cmp_evr((A)->epoch, (A)->version, (A)->release,\
00263 (B)->epoch, (B)->version, (B)->release))
00264
00274 int cr_cmp_evr(const char *e1, const char *v1, const char *r1,
00275 const char *e2, const char *v2, const char *r2);
00276
00277
00283 static inline gchar *
00284 cr_safe_string_chunk_insert(GStringChunk *chunk, const char *str)
00285 {
00286 if (!str) return NULL;
00287 return g_string_chunk_insert(chunk, str);
00288 }
00289
00296 static inline gchar *
00297 cr_safe_string_chunk_insert_null(GStringChunk *chunk, const char *str)
00298 {
00299 if (!str || *str == '\0') return NULL;
00300 return g_string_chunk_insert(chunk, str);
00301 }
00302
00303
00309 static inline gchar *
00310 cr_safe_string_chunk_insert_const(GStringChunk *chunk, const char *str)
00311 {
00312 if (!str) return NULL;
00313 return g_string_chunk_insert_const(chunk, str);
00314 }
00315
00318 #ifdef __cplusplus
00319 }
00320 #endif
00321
00322 #endif