Sat, 22 Jun 2019 16:36:52 +0200
move some properties to new namespace
for properties encryption we need to decide which props must be encrypted and the plan is, to decide by namespace
410
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | /* |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | * |
576
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
574
diff
changeset
|
4 | * Copyright 2019 Olaf Wintermann. All rights reserved. |
410
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | * |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | * |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
11 | * |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
15 | * |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
27 | */ |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | #include <stdio.h> |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | #include <stdlib.h> |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
31 | #include <string.h> |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
32 | #include <dirent.h> |
413
241db665477a
fixes build on non-windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
412
diff
changeset
|
33 | #include <sys/stat.h> |
241db665477a
fixes build on non-windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
412
diff
changeset
|
34 | #include <sys/types.h> |
578
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
35 | #include <errno.h> |
413
241db665477a
fixes build on non-windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
412
diff
changeset
|
36 | |
241db665477a
fixes build on non-windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
412
diff
changeset
|
37 | #ifndef _WIN32 |
241db665477a
fixes build on non-windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
412
diff
changeset
|
38 | #include <unistd.h> |
241db665477a
fixes build on non-windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
412
diff
changeset
|
39 | #endif |
410
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
40 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
41 | #include "system.h" |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
42 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
43 | void sys_freedirent(SysDirEnt *ent) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
44 | free(ent->name); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
45 | free(ent); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
46 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
47 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
48 | #ifndef _WIN32 |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
49 | /* ---------- POSIX implementation ---------- */ |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
50 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
51 | SYS_DIR sys_opendir(const char *path) { |
411
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
52 | DIR *dir = opendir(path); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
53 | if(!dir) { |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
54 | return NULL; |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
55 | } |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
56 | SysDir *d = malloc(sizeof(SysDir)); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
57 | d->dir = dir; |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
58 | d->ent = NULL; |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
59 | return d; |
410
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
60 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
61 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
62 | SysDirEnt* sys_readdir(SYS_DIR dir) { |
411
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
63 | if(dir->ent) { |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
64 | free(dir->ent->name); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
65 | free(dir->ent); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
66 | dir->ent = NULL; |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
67 | } |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
68 | struct dirent *ent = readdir(dir->dir); |
410
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
69 | if(ent) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
70 | SysDirEnt *e = malloc(sizeof(SysDirEnt)); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
71 | e->name = strdup(ent->d_name); |
411
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
72 | dir->ent = e; |
410
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
73 | return e; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
74 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
75 | return NULL; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
76 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
77 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
78 | void sys_closedir(SYS_DIR dir) { |
411
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
79 | closedir(dir->dir); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
80 | if(dir->ent) { |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
81 | free(dir->ent->name); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
82 | free(dir->ent); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
83 | } |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
84 | free(dir); |
410
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
85 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
86 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
87 | FILE* sys_fopen(const char *path, const char *mode) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
88 | return fopen(path, mode); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
89 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
90 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
91 | int sys_stat(const char *path, SYS_STAT *s) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
92 | return stat(path, s); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
93 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
94 | |
574
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
95 | int sys_lstat(const char *path, SYS_STAT *s) { |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
96 | return lstat(path, s); |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
97 | } |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
98 | |
411
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
99 | int sys_rename(const char *oldpath, const char *newpath) { |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
100 | return rename(oldpath, newpath); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
101 | } |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
102 | |
412
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
103 | int sys_unlink(const char *path) { |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
104 | return unlink(path); |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
105 | } |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
106 | |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
107 | int sys_mkdir(const char *path) { |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
108 | return mkdir(path, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); |
413
241db665477a
fixes build on non-windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
412
diff
changeset
|
109 | } |
410
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
110 | |
574
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
111 | ssize_t sys_readlink(const char *path, char *buffer, size_t size) { |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
112 | return readlink(path, buffer, size); |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
113 | } |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
114 | |
578
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
115 | int sys_symlink(const char *target, const char *linkpath) { |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
116 | int err = symlink(target, linkpath); |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
117 | if(err && errno == EEXIST) { |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
118 | if(unlink(linkpath)) { |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
119 | return 1; |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
120 | } |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
121 | return sys_symlink(target, linkpath); |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
122 | } |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
123 | return err; |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
124 | } |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
125 | |
410
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
126 | #else |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
127 | /* ---------- Windows implementation ---------- */ |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
128 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
129 | static wchar_t* path2winpath(const char *path, int dir, int *newlen) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
130 | size_t len = strlen(path); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
131 | size_t lenadd = dir ? 2 : 0; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
132 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
133 | |
447
a4a71ecfb9d6
fixes wrong buffer allocation on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
425
diff
changeset
|
134 | wchar_t *wpath = calloc(len+lenadd+1, sizeof(wchar_t)); |
410
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
135 | int wlen = MultiByteToWideChar( |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
136 | CP_UTF8, |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
137 | 0, |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
138 | path, |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
139 | len, |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
140 | wpath, |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
141 | len+1 |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
142 | ); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
143 | if(newlen) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
144 | *newlen = wlen; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
145 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
146 | for(int i=0;i<wlen;i++) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
147 | if(wpath[i] == L'/') { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
148 | wpath[i] = L'\\'; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
149 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
150 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
151 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
152 | if(dir) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
153 | if(wpath[wlen-1] != L'\\') { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
154 | wpath[wlen++] = L'\\'; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
155 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
156 | wpath[wlen++] = L'*'; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
157 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
158 | wpath[wlen] = 0; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
159 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
160 | return wpath; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
161 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
162 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
163 | SYS_DIR sys_opendir(const char *path) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
164 | struct WinDir *dir = malloc(sizeof(struct WinDir)); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
165 | wchar_t *dirpath = path2winpath(path, TRUE, NULL); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
166 | if(!dirpath) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
167 | fprintf(stderr, "Cannot convert path \"%s\" to UTF16\n", path); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
168 | free(dir); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
169 | return NULL; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
170 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
171 | dir->first = 1; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
172 | dir->handle = FindFirstFileW(dirpath, &dir->finddata); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
173 | free(dirpath); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
174 | if(dir->handle == INVALID_HANDLE_VALUE) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
175 | free(dir); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
176 | return NULL; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
177 | } |
411
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
178 | dir->ent = NULL; |
410
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
179 | return dir; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
180 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
181 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
182 | SysDirEnt* sys_readdir(SYS_DIR dir) { |
411
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
183 | if(dir->ent) { |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
184 | free(dir->ent->name); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
185 | free(dir->ent); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
186 | dir->ent = NULL; |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
187 | } |
410
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
188 | if(dir->first) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
189 | dir->first = 0; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
190 | } else { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
191 | if(FindNextFileW(dir->handle, &dir->finddata) == 0) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
192 | return NULL; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
193 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
194 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
195 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
196 | size_t namelen = wcslen(dir->finddata.cFileName); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
197 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
198 | char *name = malloc((namelen+1)*4); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
199 | int nlen = WideCharToMultiByte( |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
200 | CP_UTF8, |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
201 | 0, |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
202 | dir->finddata.cFileName, |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
203 | -1, |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
204 | name, |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
205 | 256, |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
206 | NULL, |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
207 | NULL); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
208 | if(nlen > 0) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
209 | name[nlen] = 0; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
210 | SysDirEnt *ent = malloc(sizeof(SysDirEnt)); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
211 | ent->name = name; |
411
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
212 | dir->ent = ent; |
410
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
213 | return ent; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
214 | } else { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
215 | return NULL; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
216 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
217 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
218 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
219 | void sys_closedir(SYS_DIR dir) { |
411
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
220 | if(dir->ent) { |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
221 | free(dir->ent->name); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
222 | free(dir->ent); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
223 | } |
410
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
224 | FindClose(dir->handle); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
225 | free(dir); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
226 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
227 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
228 | FILE* sys_fopen(const char *path, const char *mode) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
229 | wchar_t *fpath = path2winpath(path, FALSE, NULL); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
230 | wchar_t *fmode = path2winpath(mode, FALSE, NULL); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
231 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
232 | FILE *file = (fpath && fmode) ? _wfopen(fpath, fmode) : NULL; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
233 | free(fpath); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
234 | free(fmode); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
235 | return file; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
236 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
237 | |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
238 | int sys_stat(const char *path, SYS_STAT *s) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
239 | wchar_t *fpath = path2winpath(path, FALSE, NULL); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
240 | if(!fpath) { |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
241 | fprintf(stderr, "Cannot convert path \"%s\" to UTF16\n", path); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
242 | return -1; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
243 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
244 | int ret = _wstat64(fpath, s); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
245 | free(fpath); |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
246 | return ret; |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
247 | } |
0b9bea2d7283
adds file io abstraction functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
248 | |
574
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
249 | int sys_lstat(const char *path, SYS_STAT *s) { |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
250 | // TODO: fix |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
251 | wchar_t *fpath = path2winpath(path, FALSE, NULL); |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
252 | if(!fpath) { |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
253 | fprintf(stderr, "Cannot convert path \"%s\" to UTF16\n", path); |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
254 | return -1; |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
255 | } |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
256 | int ret = _wstat64(fpath, s); |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
257 | free(fpath); |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
258 | return ret; |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
259 | } |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
260 | |
411
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
261 | int sys_rename(const char *oldpath, const char *newpath) { |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
262 | wchar_t *o = path2winpath(oldpath, FALSE, NULL); |
412
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
263 | wchar_t *n = path2winpath(newpath, FALSE, NULL); |
411
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
264 | if(!o || !n) { |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
265 | return -1; |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
266 | } |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
267 | |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
268 | struct __stat64 s; |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
269 | if(!_wstat64(n, &s)) { |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
270 | if(_wunlink(n)) { |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
271 | fprintf(stderr, "sys_rename: cannot delete existing file: %ls\n", n); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
272 | } |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
273 | } |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
274 | |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
275 | int ret = _wrename(o, n); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
276 | free(o); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
277 | free(n); |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
278 | return ret; |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
279 | } |
a182e503617b
using new io abstraction in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
410
diff
changeset
|
280 | |
412
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
281 | int sys_unlink(const char *path) { |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
282 | wchar_t *wpath = path2winpath(path, FALSE, NULL); |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
283 | if(!wpath) { |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
284 | fprintf(stderr, "sys_unlink: cannot convert path\n"); |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
285 | return -1; |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
286 | } |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
287 | int ret = _wunlink(wpath); |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
288 | free(wpath); |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
289 | return ret; |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
290 | } |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
291 | |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
292 | int sys_mkdir(const char *path) { |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
293 | wchar_t *wpath = path2winpath(path, FALSE, NULL); |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
294 | if(!wpath) { |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
295 | fprintf(stderr, "sys_mkdir: cannot convert path\n"); |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
296 | return -1; |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
297 | } |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
298 | int ret = _wmkdir(wpath); |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
299 | free(wpath); |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
300 | return ret; |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
301 | } |
dc74f736aea1
adds more fs abstraction
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
411
diff
changeset
|
302 | |
574
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
303 | ssize_t sys_readlink(const char *path, char *buffer, size_t size) { |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
304 | // TODO |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
305 | fprintf(stderr, "sys_readlink: implement me\n"); |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
306 | return 1; |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
307 | } |
c36eddf167a8
read link on LocalResource creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
448
diff
changeset
|
308 | |
578
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
309 | int sys_symlink(const char *target, const char *linkpath) { |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
310 | // TODO |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
311 | fprintf(stderr, "sys_symlink: implement me\n"); |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
312 | return 1; |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
313 | } |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
314 | |
425
ae4d89c3477c
fixes dav list return value
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
413
diff
changeset
|
315 | #endif |