16 #include <gwenhywfar/debug.h> 17 #include <gwenhywfar/sar.h> 18 #include <gwenhywfar/directory.h> 20 #include <sys/types.h> 36 #if ((_BSD_SOURCE || _XOPEN_SOURCE >= 500 || (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) || _POSIX_C_SOURCE >= 200112L) && !defined(__MINGW32__)) || defined(OS_DARWIN) 43 fname, errno, strerror(errno));
44 fprintf(stderr,
"Ignoring file \"%s\"\n", fname);
49 if (recursive && S_ISDIR(st.st_mode)) {
70 if (strcmp(buffer,
".")!=0 &&
71 strcmp(buffer,
"..")!=0)
129 "Specify the archive file name",
130 "Specify the archive file name" 140 "add folders recursively",
141 "add folders recursively" 162 "Show this help screen",
163 "Show this help screen" 173 fprintf(stderr,
"ERROR: Could not parse arguments\n");
181 fprintf(stderr,
"ERROR: Could not create help string\n");
200 fprintf(stderr,
"ERROR: Error opening archive (%d)\n", rv);
213 if (fname && *fname) {
216 fprintf(stderr,
"ERROR: Error adding entry \"%s\" to archive \"%s\" (%d)\n",
234 fprintf(stderr,
"ERROR: Error adding file \"%s\" to archive \"%s\" (%d)\n",
241 fprintf(stdout,
"added \"%s\"\n", s);
251 fprintf(stderr,
"ERROR: Error closing archive (%d)\n", rv);
#define DBG_ERROR(dbg_logger, format,...)
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)
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)
int GWEN_DB_GetIntValue(GWEN_DB_NODE *n, const char *path, int idx, int defVal)
#define DBG_INFO(dbg_logger, format,...)
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)