dav/system.c

Sat, 22 Jun 2019 16:36:52 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 22 Jun 2019 16:36:52 +0200
changeset 607
5dc7fe41e8f8
parent 578
bb1e60fada74
child 608
3e4c0285a868
permissions
-rw-r--r--

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

mercurial