createrepo_c library 0.20.1
C library for metadata manipulation
Loading...
Searching...
No Matches
misc.h
1/* createrepo_c - Library of routines for manipulation with repodata
2 * Copyright (C) 2012 Tomas Mlcoch
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
17 * USA.
18 */
19
20#ifndef __C_CREATEREPOLIB_MISC_H__
21#define __C_CREATEREPOLIB_MISC_H__
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27#include <glib.h>
28#include <string.h>
29#include <curl/curl.h>
30#include "compression_wrapper.h"
31#include "xml_parser.h"
32
40#define CR_STATICSTRLEN(s) (sizeof(s)/sizeof(s[0]))
41
42/* Length of static defined array.
43 */
44#define CR_ARRAYLEN(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))
45
50const char *cr_flag_to_str(gint64 flags);
51
54typedef struct {
55 char *epoch;
56 char *version;
57 char *release;
58} cr_EVR;
59
60typedef struct {
61 char *name;
62 char *epoch;
63 char *version;
64 char *release;
65} cr_NEVR;
66
67typedef struct {
68 char *name;
69 char *epoch;
70 char *version;
71 char *release;
72 char *arch;
73} cr_NEVRA;
74
78struct cr_Version {
79 long major;
80 long minor;
81 long patch;
82 char *suffix;
83};
84
85
94cr_EVR *cr_str_to_evr(const char *string, GStringChunk *chunk);
95
102void
104
110static inline int cr_is_primary(const char *filename) {
111 if (!strncmp(filename, "/etc/", 5))
112 return 1;
113 if (!strcmp(filename, "/usr/lib/sendmail"))
114 return 1;
115 if (strstr(filename, "bin/"))
116 return 1;
117 return 0;
118};
119
123 unsigned int start;
124 unsigned int end;
125};
126
133 GError **err);
134
140char *cr_get_filename(const char *filepath);
141
147char *cr_get_cleaned_href(const char *filepath);
148
157int cr_download(CURL *handle,
158 const char *url,
159 const char *destination,
160 GError **err);
161
168gboolean cr_copy_file(const char *src,
169 const char *dst,
170 GError **err);
171
183#define cr_compress_file(SRC, DST, COMTYPE, ZCK_DICT_DIR, ZCK_AUTO_CHUNK, ERR) \
184 cr_compress_file_with_stat(SRC, DST, COMTYPE, NULL, ZCK_DICT_DIR, \
185 ZCK_AUTO_CHUNK, ERR)
186
199int cr_compress_file_with_stat(const char *src,
200 const char *dst,
201 cr_CompressionType comtype,
202 cr_ContentStat *stat,
203 const char *zck_dict_dir,
204 gboolean zck_auto_chunk,
205 GError **err);
206
217#define cr_decompress_file(SRC, DST, COMTYPE, ERR) \
218 cr_decompress_file_with_stat(SRC, DST, COMTYPE, NULL, ERR)
219
232 const char *dst,
233 cr_CompressionType comtype,
234 cr_ContentStat *stat,
235 GError **err);
236
243gboolean cr_better_copy_file(const char *src,
244 const char *dst,
245 GError **err);
246
252int cr_remove_dir(const char *path, GError **err);
253
261gboolean cr_move_recursive(const char *srcDir, const char *dstDir, GError **err);
262
267char *cr_normalize_dir_path(const char *path);
268
273struct cr_Version cr_str_to_version(const char *str);
274
281int cr_cmp_version_str(const char* str1, const char *str2);
282
289void cr_null_log_fn(const gchar *log_domain,
290 GLogLevelFlags log_level,
291 const gchar *message,
292 gpointer user_data);
293
300void cr_log_fn(const gchar *log_domain,
301 GLogLevelFlags log_level,
302 const gchar *message,
303 gpointer user_data);
304
312void cr_slist_free_full(GSList *list, GDestroyNotify free_f);
313
321void cr_queue_free_full(GQueue *queue, GDestroyNotify free_f);
322
332cr_NEVRA *cr_split_rpm_filename(const char *filename);
333
339#define cr_cmp_nevra(A, B) (cr_cmp_evr((A)->epoch, (A)->version, (A)->release,\
340 (B)->epoch, (B)->version, (B)->release))
341
351int cr_cmp_evr(const char *e1, const char *v1, const char *r1,
352 const char *e2, const char *v2, const char *r2);
353
354
360static inline gchar *
361cr_safe_string_chunk_insert(GStringChunk *chunk, const char *str)
362{
363 if (!str) return NULL;
364 return g_string_chunk_insert(chunk, str);
365}
366
372static inline gchar *
373cr_safe_string_chunk_insert_and_free(GStringChunk *chunk, char *str)
374{
375 if (!str) return NULL;
376 gchar *copy = g_string_chunk_insert(chunk, str);
377 g_free(str);
378 return copy;
379}
380
387static inline gchar *
388cr_safe_string_chunk_insert_null(GStringChunk *chunk, const char *str)
389{
390 if (!str || *str == '\0') return NULL;
391 return g_string_chunk_insert(chunk, str);
392}
393
394
400static inline gchar *
401cr_safe_string_chunk_insert_const(GStringChunk *chunk, const char *str)
402{
403 if (!str) return NULL;
404 return g_string_chunk_insert_const(chunk, str);
405}
406
407static inline gboolean
408cr_key_file_get_boolean_default(GKeyFile *key_file,
409 const gchar *group_name,
410 const gchar *key,
411 gboolean default_value,
412 GError **error)
413{
414 GError *tmp_err = NULL;
415 gboolean ret = g_key_file_get_boolean(key_file, group_name, key, &tmp_err);
416 if (tmp_err) {
417 g_propagate_error(error, tmp_err);
418 return default_value;
419 }
420 return ret;
421}
422
428int
430 char *msg,
431 void *cbdata,
432 GError **err);
433
440gboolean
441cr_write_to_file(GError **err, gchar *filename, const char *format, ...);
442
443typedef enum {
444 CR_CP_DEFAULT = (1<<0),
446 CR_CP_RECURSIVE = (1<<1),
448 CR_CP_PRESERVE_ALL = (1<<2),
450} cr_CpFlags;
451
459gboolean
460cr_cp(const char *src,
461 const char *dst,
462 cr_CpFlags flags,
463 const char *working_directory,
464 GError **err);
465
466typedef enum {
467 CR_RM_DEFAULT = (1<<0),
469 CR_RM_RECURSIVE = (1<<1),
471 CR_RM_FORCE = (1<<2),
473} cr_RmFlags;
474
481gboolean
482cr_rm(const char *path,
483 cr_RmFlags flags,
484 const char *working_dir,
485 GError **err);
486
492gchar *
493cr_append_pid_and_datetime(const char *str, const char *suffix);
494
503gboolean
504cr_spawn_check_exit_status(gint exit_status, GError **error);
505
510cr_NEVR *
511cr_str_to_nevr(const char *str);
512
516void
518
523cr_NEVRA *
524cr_str_to_nevra(const char *str);
525
529void
531
543gboolean
544cr_identical_files(const gchar *fn1,
545 const gchar *fn2,
546 gboolean *identical,
547 GError **err);
548
552gchar *
553cr_cut_dirs(gchar *path, gint cut_dirs);
554
558const gchar *
560
574gchar *
575cr_get_dict_file(const gchar *dir,
576 const gchar *file);
577
580#ifdef __cplusplus
581}
582#endif
583
584#endif /* __C_CREATEREPOLIB_MISC_H__ */
cr_CompressionType
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)
gboolean cr_cp(const char *src, const char *dst, cr_CpFlags flags, const char *working_directory, GError **err)
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)
void cr_nevra_free(cr_NEVRA *nevra)
char * cr_get_filename(const char *filepath)
cr_RmFlags
Definition: misc.h:466
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)
cr_CpFlags
Definition: misc.h:443
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)
@ CR_RM_FORCE
Definition: misc.h:471
@ CR_RM_DEFAULT
Definition: misc.h:467
@ CR_RM_RECURSIVE
Definition: misc.h:469
@ CR_CP_RECURSIVE
Definition: misc.h:446
@ CR_CP_PRESERVE_ALL
Definition: misc.h:448
@ CR_CP_DEFAULT
Definition: misc.h:444
cr_XmlParserWarningType
Definition: xml_parser.h:42
Definition: misc.h:54
char * version
Definition: misc.h:56
char * epoch
Definition: misc.h:55
char * release
Definition: misc.h:57
unsigned int start
Definition: misc.h:123
unsigned int end
Definition: misc.h:124
Definition: misc.h:67
Definition: misc.h:60
long minor
Definition: misc.h:80
char * suffix
Definition: misc.h:82
long major
Definition: misc.h:79
long patch
Definition: misc.h:81