20#ifndef __C_CREATEREPOLIB_MISC_H__
21#define __C_CREATEREPOLIB_MISC_H__
31#include "compression_wrapper.h"
32#include "xml_parser.h"
41#define CR_STATICSTRLEN(s) (sizeof(s)/sizeof(s[0]))
45#define CR_ARRAYLEN(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))
111static inline int cr_is_primary(
const char *filename) {
112 if (!strncmp(filename,
"/etc/", 5))
114 if (!strcmp(filename,
"/usr/lib/sendmail"))
116 if (strstr(filename,
"bin/"))
160 const char *destination,
184#define cr_compress_file(SRC, DST, COMTYPE, ZCK_DICT_DIR, ZCK_AUTO_CHUNK, ERR) \
185 cr_compress_file_with_stat(SRC, DST, COMTYPE, NULL, ZCK_DICT_DIR, \
204 const char *zck_dict_dir,
205 gboolean zck_auto_chunk,
218#define cr_decompress_file(SRC, DST, COMTYPE, ERR) \
219 cr_decompress_file_with_stat(SRC, DST, COMTYPE, NULL, ERR)
291 GLogLevelFlags log_level,
292 const gchar *message,
302 GLogLevelFlags log_level,
303 const gchar *message,
340#define cr_cmp_nevra(A, B) (cr_cmp_evr((A)->epoch, (A)->version, (A)->release,\
341 (B)->epoch, (B)->version, (B)->release))
352int cr_cmp_evr(
const char *e1,
const char *v1,
const char *r1,
353 const char *e2,
const char *v2,
const char *r2);
362cr_safe_string_chunk_insert(GStringChunk *chunk,
const char *str)
364 if (!str)
return NULL;
365 return g_string_chunk_insert(chunk, str);
374cr_safe_string_chunk_insert_and_free(GStringChunk *chunk,
char *str)
376 if (!str)
return NULL;
377 gchar *copy = g_string_chunk_insert(chunk, str);
389cr_safe_string_chunk_insert_null(GStringChunk *chunk,
const char *str)
391 if (!str || *str ==
'\0')
return NULL;
392 return g_string_chunk_insert(chunk, str);
402cr_safe_string_chunk_insert_const(GStringChunk *chunk,
const char *str)
404 if (!str)
return NULL;
405 return g_string_chunk_insert_const(chunk, str);
408static inline gboolean
409cr_key_file_get_boolean_default(GKeyFile *key_file,
410 const gchar *group_name,
412 gboolean default_value,
415 GError *tmp_err = NULL;
416 gboolean ret = g_key_file_get_boolean(key_file, group_name, key, &tmp_err);
418 g_propagate_error(error, tmp_err);
419 return default_value;
464 const char *working_directory,
465 GError **err) __attribute__ ((deprecated (
"please use `cr_gio_cp` instead")));
477 GFileCopyFlags flags,
478 GCancellable *cancellable,
499 const char *working_dir,
gchar * cr_cut_dirs(gchar *path, gint cut_dirs)
int cr_cmp_version_str(const char *str1, const char *str2)
gboolean cr_rm(const char *path, cr_RmFlags flags, const char *working_dir, GError **err)
gchar * cr_get_dict_file(const gchar *dir, const gchar *file)
const gchar * cr_version_string_with_features(void)
gboolean cr_write_to_file(GError **err, gchar *filename, const char *format,...)
void cr_queue_free_full(GQueue *queue, GDestroyNotify free_f)
cr_NEVR * cr_str_to_nevr(const char *str)
const char * cr_flag_to_str(gint64 flags)
void cr_log_fn(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data)
gchar * cr_append_pid_and_datetime(const char *str, const char *suffix)
void cr_evr_free(cr_EVR *evr)
cr_EVR * cr_str_to_evr(const char *string, GStringChunk *chunk)
gboolean cr_copy_file(const char *src, const char *dst, GError **err)
gboolean cr_move_recursive(const char *srcDir, const char *dstDir, GError **err)
int cr_download(CURL *handle, const char *url, const char *destination, GError **err)
char * cr_get_cleaned_href(const char *filepath)
struct cr_Version cr_str_to_version(const char *str)
void cr_nevr_free(cr_NEVR *nevr)
cr_NEVRA * cr_str_to_nevra(const char *str)
gboolean cr_cp(const char *src, const char *dst, cr_CpFlags flags, const char *working_directory, GError **err) __attribute__((deprecated("please use `cr_gio_cp` instead")))
void cr_nevra_free(cr_NEVRA *nevra)
char * cr_get_filename(const char *filepath)
int cr_warning_cb(cr_XmlParserWarningType type, char *msg, void *cbdata, GError **err)
gboolean cr_better_copy_file(const char *src, const char *dst, GError **err)
void cr_null_log_fn(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data)
int cr_compress_file_with_stat(const char *src, const char *dst, cr_CompressionType comtype, cr_ContentStat *stat, const char *zck_dict_dir, gboolean zck_auto_chunk, GError **err)
cr_NEVRA * cr_split_rpm_filename(const char *filename)
void cr_slist_free_full(GSList *list, GDestroyNotify free_f)
int cr_remove_dir(const char *path, GError **err)
char * cr_normalize_dir_path(const char *path)
gboolean cr_spawn_check_exit_status(gint exit_status, GError **error)
int cr_decompress_file_with_stat(const char *src, const char *dst, cr_CompressionType comtype, cr_ContentStat *stat, GError **err)
gboolean cr_identical_files(const gchar *fn1, const gchar *fn2, gboolean *identical, GError **err)
struct cr_HeaderRangeStruct cr_get_header_byte_range(const char *filename, GError **err)
int cr_cmp_evr(const char *e1, const char *v1, const char *r1, const char *e2, const char *v2, const char *r2)
gboolean cr_gio_cp(GFile *src, GFile *dst, GFileCopyFlags flags, GCancellable *cancellable, GError **err)