createrepo_c library
C library for metadata manipulation
src/misc.h
00001 /* createrepo_c - Library of routines for manipulation with repodata
00002  * Copyright (C) 2012  Tomas Mlcoch
00003  *
00004  * This program is free software; you can redistribute it and/or
00005  * modify it under the terms of the GNU General Public License
00006  * as published by the Free Software Foundation; either version 2
00007  * of the License, or (at your option) any later version.
00008  *
00009  * This program is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  * GNU General Public License for more details.
00013  *
00014  * You should have received a copy of the GNU General Public License
00015  * along with this program; if not, write to the Free Software
00016  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
00017  * USA.
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 #include "constants.h"
00032 
00039 #define CR_UNUSED(x) (void)(x)
00040 
00046 const char *cr_flag_to_str(gint64 flags);
00047 
00051 struct cr_EVR {
00052     char *epoch;        
00053     char *version;      
00054     char *release;      
00055 };
00056 
00057 struct cr_NVREA {
00058     char *name;         
00059     char *version;      
00060     char *release;      
00061     char *epoch;        
00062     char *arch;         
00063 };
00064 
00069 struct cr_Version {
00070     long version;       
00071     long release;       
00072     long patch;         
00073     char *suffix;       
00074 };
00075 
00076 
00086 struct cr_EVR cr_str_to_evr(const char *string, GStringChunk *chunk);
00087 
00094 static inline int cr_is_primary(const char *filename) {
00095     if (!strncmp(filename, "/etc/", 5))
00096         return 1;
00097     if (!strcmp(filename, "/usr/lib/sendmail"))
00098         return 1;
00099     if (strstr(filename, "bin/"))
00100         return 1;
00101     return 0;
00102 };
00103 
00111 char *cr_compute_file_checksum(const char *filename, cr_ChecksumType type);
00112 
00116 struct cr_HeaderRangeStruct {
00117     unsigned int start;         
00118     unsigned int end;           
00119 };
00120 
00126 struct cr_HeaderRangeStruct cr_get_header_byte_range(const char *filename);
00127 
00134 const char *cr_checksum_name_str(cr_ChecksumType type);
00135 
00142 char *cr_get_filename(const char *filepath);
00143 
00145 #define CR_COPY_OK              0       
00146 #define CR_COPY_ERR             1       
00159 void cr_download(CURL *handle,
00160                  const char *url,
00161                  const char *destination,
00162                  char **error);
00163 
00170 int cr_copy_file(const char *src, const char *dst);
00171 
00181 int cr_compress_file(const char *src,
00182                      const char *dst,
00183                      cr_CompressionType compression);
00184 
00191 int cr_better_copy_file(const char *src, const char *dst);
00192 
00198 int cr_remove_dir(const char *path);
00199 
00205 char *cr_normalize_dir_path(const char *path);
00206 
00212 struct cr_Version cr_str_to_version(const char *str);
00213 
00221 int cr_cmp_version_str(const char* str1, const char *str2);
00222 
00230 void cr_null_log_fn(const gchar *log_domain,
00231                     GLogLevelFlags log_level,
00232                     const gchar *message,
00233                     gpointer user_data);
00234 
00242 void cr_log_fn(const gchar *log_domain,
00243                GLogLevelFlags log_level,
00244                const gchar *message,
00245                gpointer user_data);
00246 
00255 void cr_slist_free_full(GSList *list, GDestroyNotify free_f);
00256 
00257 struct cr_NVREA *cr_split_rpm_filename(const char *filename);
00258 void cr_nvrea_free(struct cr_NVREA *);
00259 
00266 #define cr_cmp_nvrea(A, B) (cr_cmp_evr((A)->epoch, (A)->version, (A)->release,\
00267                                         (B)->epoch, (B)->version, (B)->release))
00268 
00279 int cr_cmp_evr(const char *e1, const char *v1, const char *r1,
00280                const char *e2, const char *v2, const char *r2);
00281 
00282 #ifdef __cplusplus
00283 }
00284 #endif
00285 
00286 #endif /* __C_CREATEREPOLIB_MISC_H__ */