summaryrefslogtreecommitdiffstats
path: root/source/libsmb/libsmbclient.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/libsmb/libsmbclient.c')
-rw-r--r--source/libsmb/libsmbclient.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/source/libsmb/libsmbclient.c b/source/libsmb/libsmbclient.c
index f08d9440f96..e44bdea2d3d 100644
--- a/source/libsmb/libsmbclient.c
+++ b/source/libsmb/libsmbclient.c
@@ -680,12 +680,18 @@ SMBCSRV *smbc_server(SMBCCTX *context,
srv->cli = c;
srv->dev = (dev_t)(str_checksum(server) ^ str_checksum(share));
- /* now add it to the cache (internal or external) */
+ /* now add it to the cache (internal or external) */
+ /* Let the cache function set errno if it wants to */
+ errno = 0;
if (context->callbacks.add_cached_srv_fn(context, srv, server, share, workgroup, username)) {
+ int saved_errno = errno;
DEBUG(3, (" Failed to add server to cache\n"));
+ errno = saved_errno;
+ if (errno == 0) {
+ errno = ENOMEM;
+ }
goto failed;
}
-
DEBUG(2, ("Server connect ok: //%s/%s: %p\n",
server, share, srv));
@@ -1939,7 +1945,6 @@ static SMBCFILE *smbc_opendir_ctx(SMBCCTX *context, const char *fname)
SAFE_FREE(dir->fname);
SAFE_FREE(dir);
}
- errno = cli_errno(&srv->cli);
return NULL;
@@ -2032,7 +2037,6 @@ static SMBCFILE *smbc_opendir_ctx(SMBCCTX *context, const char *fname)
SAFE_FREE(dir->fname);
SAFE_FREE(dir);
}
- errno = cli_errno(&srv->cli);
return NULL;
@@ -2106,7 +2110,6 @@ static SMBCFILE *smbc_opendir_ctx(SMBCCTX *context, const char *fname)
SAFE_FREE(dir->fname);
SAFE_FREE(dir);
}
- errno = cli_errno(&srv->cli);
return NULL;
}
@@ -2150,7 +2153,7 @@ static SMBCFILE *smbc_opendir_ctx(SMBCCTX *context, const char *fname)
}
else {
- errno = ENODEV; /* Neither the workgroup nor server exists */
+ errno = ECONNREFUSED; /* Neither the workgroup nor server exists */
if (dir) {
SAFE_FREE(dir->fname);
SAFE_FREE(dir);