This commit is contained in:
Andreas Schneider 2008-04-23 12:12:02 +02:00
Родитель d3c92bbf60
Коммит c281a720b0
2 изменённых файлов: 24 добавлений и 19 удалений

Просмотреть файл

@ -20,6 +20,7 @@
* vim: ts=2 sw=2 et cindent
*/
#include <errno.h>
#include <stdio.h>
#include <libsmbclient.h>
@ -154,6 +155,10 @@ static csync_vio_method_handle_t *_opendir(const char *name) {
}
handle->dh = smbc_opendir(name);
if (handle->dh < 0) {
SAFE_FREE(handle);
return NULL;
}
handle->path = c_strdup(name);
return (csync_vio_method_handle_t *) handle;
@ -180,9 +185,14 @@ static csync_vio_file_stat_t *_readdir(csync_vio_method_handle_t *dhandle) {
handle = (smb_dhandle_t *) dhandle;
errno = 0;
dirent = smbc_readdir(handle->dh);
if (dirent == NULL) {
goto err;
if (errno) {
goto err;
} else {
return NULL;
}
}
file_stat = csync_vio_file_stat_new();
@ -241,12 +251,7 @@ static int _stat(const char *uri, csync_vio_file_stat_t *buf) {
return -1;
}
buf = csync_vio_file_stat_new();
if (buf == NULL) {
return -1;
}
buf->name = c_basename(uri);
buf->name = (char *) uri;
if (buf->name == NULL) {
csync_vio_file_stat_destroy(buf);
}

Просмотреть файл

@ -20,6 +20,7 @@
* vim: ts=2 sw=2 et cindent
*/
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
@ -122,6 +123,10 @@ csync_vio_method_handle_t *csync_vio_local_opendir(const char *name) {
}
handle->dh = opendir(name);
if (handle->dh == NULL) {
SAFE_FREE(handle);
return NULL;
}
handle->path = c_strdup(name);
return (csync_vio_method_handle_t *) handle;
@ -148,9 +153,14 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_method_handle_t *dhandl
handle = (dhandle_t *) dhandle;
errno = 0;
dirent = readdir(handle->dh);
if (dirent == NULL) {
goto err;
if (errno) {
goto err;
} else {
return NULL;
}
}
file_stat = csync_vio_file_stat_new();
@ -183,11 +193,9 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_method_handle_t *dhandl
break;
}
SAFE_FREE(dirent);
return file_stat;
err:
SAFE_FREE(dirent);
SAFE_FREE(file_stat);
return NULL;
@ -208,15 +216,7 @@ int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) {
return -1;
}
buf = csync_vio_file_stat_new();
if (buf == NULL) {
return -1;
}
buf->name = c_basename(uri);
if (buf->name == NULL) {
csync_vio_file_stat_destroy(buf);
}
buf->name = c_strdup(uri);
buf->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE;
switch(sb.st_mode & S_IFMT) {