Add a portable ssh_mkdir function for Windows.

This commit is contained in:
Andreas Schneider
2009-09-09 14:01:20 +02:00
parent e0c969bb41
commit 32d5293318
4 changed files with 30 additions and 1 deletions

View File

@@ -374,6 +374,7 @@ int ssh_userauth_kbdint_setanswer(SSH_SESSION *session, unsigned int i,
const char *answer);
/* misc.c */
int ssh_mkdir (const char *pathname, mode_t mode);
char *ssh_dirname (const char *path);
char *ssh_basename (const char *path);

View File

@@ -1470,7 +1470,7 @@ int ssh_write_knownhost(SSH_SESSION *session) {
return -1;
}
if (! ssh_file_readaccess_ok(dir)) {
if (mkdir(dir, 0700) < 0) {
if (ssh_mkdir(dir, 0700) < 0) {
ssh_set_error(session, SSH_FATAL,
"Cannot create %s directory.", dir);
SAFE_FREE(dir);

View File

@@ -104,6 +104,9 @@ SSH_0.3 {
ssh_get_random;
ssh_get_status;
ssh_get_version;
ssh_mkdir;
ssh_basename;
ssh_dirname;
ssh_init;
ssh_is_server_known;
ssh_log;

View File

@@ -27,6 +27,7 @@
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include "config.h"
@@ -35,6 +36,7 @@
#define _WIN32_IE 0x0400 //SHGetSpecialFolderPath
#include <shlobj.h>
#include <winsock2.h>
#include <direct.h>
#else
#include <pwd.h>
#include <arpa/inet.h>
@@ -258,5 +260,28 @@ char *ssh_basename (const char *path) {
return new;
}
/**
* @brief Attempts to create a directory with the given pathname.
*
* This is the portable version of mkdir, mode is ignored on Windows systems.
*
* @param pathname The path name to create the directory.
*
* @param mode The permissions to use.
*
* @return 0 on success, < 0 on error with errno set.
*/
int ssh_mkdir(const char *pathname, mode_t mode) {
int r;
#ifdef _WIN32
r = _mkdir(pathname);
#else
r = mkdir(pathname, mode);
#endif
return r;
}
/** @} */
/* vim: set ts=2 sw=2 et cindent: */