16 #include <gwenhywfar/debug.h> 17 #include <gwenhywfar/sar.h> 18 #include <gwenhywfar/directory.h> 20 #include <sys/types.h> 35 #if _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED 42 fname, errno, strerror(errno));
43 fprintf(stderr,
"Ignoring file \"%s\"\n", fname);
48 if (recursive && S_ISDIR(st.st_mode)) {
69 if (strcmp(buffer,
".")!=0 &&
70 strcmp(buffer,
"..")!=0)
128 "Specify the archive file name",
129 "Specify the archive file name" 139 "add folders recursively",
140 "add folders recursively" 161 "Show this help screen",
162 "Show this help screen" 172 fprintf(stderr,
"ERROR: Could not parse arguments\n");
180 fprintf(stderr,
"ERROR: Could not create help string\n");
199 fprintf(stderr,
"ERROR: Error opening archive (%d)\n", rv);
212 if (fname && *fname) {
215 fprintf(stderr,
"ERROR: Error adding entry \"%s\" to archive \"%s\" (%d)\n",
233 fprintf(stderr,
"ERROR: Error adding file \"%s\" to archive \"%s\" (%d)\n",
240 fprintf(stdout,
"added \"%s\"\n", s);
250 fprintf(stderr,
"ERROR: Error closing archive (%d)\n", rv);
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
GWENHYWFAR_API void GWEN_Directory_free(GWEN_DIRECTORY *d)
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
struct GWEN_DB_NODE GWEN_DB_NODE
#define GWEN_SYNCIO_FILE_FLAGS_WRITE
#define GWEN_DIR_SEPARATOR_S
#define GWEN_SYNCIO_FILE_FLAGS_READ
GWEN_SAR * GWEN_Sar_new(void)
int GWEN_Sar_AddFile(GWEN_SAR *sr, const char *fname)
static int addToList(const char *fname, int recursive, GWEN_STRINGLIST *sl)
int GWEN_Sar_CloseArchive(GWEN_SAR *sr, int abandon)
GWENHYWFAR_API int GWEN_Directory_Close(GWEN_DIRECTORY *d)
uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf)
GWENHYWFAR_API GWEN_DIRECTORY * GWEN_Directory_new(void)
#define GWEN_ARGS_FLAGS_HELP
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
struct GWEN_DIRECTORY GWEN_DIRECTORY
#define GWEN_ARGS_RESULT_HELP
#define GWEN_ARGS_RESULT_ERROR
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
int GWEN_Args_Usage(const GWEN_ARGS *args, GWEN_BUFFER *ubuf, GWEN_ARGS_OUTTYPE ot)
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
#define GWEN_ARGS_MODE_ALLOW_FREEPARAM
const char * GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal)
void GWEN_Sar_free(GWEN_SAR *sr)
GWEN_DB_NODE * GWEN_DB_GetGroup(GWEN_DB_NODE *n, uint32_t flags, const char *path)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
#define GWEN_ARGS_FLAGS_LAST
int GWEN_Buffer_Crop(GWEN_BUFFER *bf, uint32_t pos, uint32_t l)
int add2Archive(GWEN_DB_NODE *dbArgs, int argc, char **argv)
#define DBG_ERROR(dbg_logger, format, args...)
int GWEN_Sar_OpenArchive(GWEN_SAR *sr, const char *aname, GWEN_SYNCIO_FILE_CREATIONMODE cm, uint32_t acc)
int GWEN_Args_Check(int argc, char **argv, int startAt, uint32_t mode, const GWEN_ARGS *args, GWEN_DB_NODE *db)
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
#define DBG_INFO(dbg_logger, format, args...)
int GWEN_DB_GetIntValue(GWEN_DB_NODE *n, const char *path, int idx, int defVal)
GWENHYWFAR_API int GWEN_Directory_Read(GWEN_DIRECTORY *d, char *buffer, unsigned int len)
GWEN_STRINGLIST * GWEN_StringList_new(void)
#define GWEN_ARGS_FLAGS_HAS_ARGUMENT
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
#define GWEN_DB_FLAGS_DEFAULT
GWENHYWFAR_API int GWEN_Directory_Open(GWEN_DIRECTORY *d, const char *n)