+int mz_copy_dir(CPSettings *settings, SrcFile *file, const char *from, const char *to) {
+ printf("mkdir %s\n", to);
+ return mkdir(to, file->mode);
+}
+
+int mz_copy_file(CPSettings *settings, SrcFile *file, const char *from, const char *to, char *buffer, size_t bufsize) {
+ printf("cp %s %s\n", from, to);
+ int fin = open(from, O_RDONLY);
+ if(fin < 0) {
+ return 1;
+ }
+
+ int ret = 0;
+
+ int fout = open(to, O_WRONLY|O_CREAT, file->mode);
+ if(fout < 0) {
+ perror("open");
+ close(fin);
+ return 1;
+ }
+
+ ssize_t r;
+ while((r = read(fin, buffer, bufsize)) > 0) {
+ if(write(fout, buffer, r) != r) {
+ ret = 1;
+ break;
+ }
+ }
+
+ close(fin);
+ close(fout);
+
+ return ret;
+}