/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * Copyright 2021 Olaf Wintermann
*
- * Copyright 2021 Olaf Wintermann. All rights reserved.
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
*
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
*/
#ifndef MAIN_H
#include <ucx/string.h>
+#include <pthread.h>
+
#ifdef __cplusplus
extern "C" {
#endif
#define CLIENT_MSG_BUFSIZE 512
+#define MAX_COPY_THREADS 32
+
typedef char CPBool;
+typedef struct SrcFile SrcFile;
+typedef struct MZLock MZLock;
+typedef struct MZQueue MZQueue;
+
typedef struct {
char *from;
char *to;
+ size_t num_threads;
CPBool url;
CPBool pause;
CPBool printsocket;
} CPSettings;
+struct MZLock {
+ pthread_mutex_t mutex;
+ pthread_cond_t cond;
+};
+
+struct SrcFile {
+ /*
+ * src file path relative to CPSettings.from
+ */
+ char *path;
+
+ /*
+ * is the file a directory
+ */
+ CPBool isdir;
+
+ /*
+ * file successfully copied
+ */
+ CPBool finished;
+
+ /*
+ * processing this file depends on another file (directory)
+ */
+ SrcFile *depends_on;
+
+ /*
+ * lock used for waiting, until this resource is successfully copied
+ */
+ MZLock *lock;
+};
+
+struct MZQueue {
+ SrcFile *file;
+ MZQueue *next;
+};
+
const char* mzcp_get_cfgdir(void);
const char* mzcp_get_copydir(void);
int mzcp_copy(CPSettings *settings);
+int mzcp_start_scan(CPSettings *settings);
+void* scan_run(void *data);
+
+int enqueue_file(SrcFile *file);
+
+int mzcp_start_copy_threads(CPSettings *settings);
+void* copy_run(void *data);
+
#ifdef __cplusplus