mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-04 12:20:42 +09:00
Add a portable ssh_mkdir function for Windows.
This commit is contained in:
@@ -444,6 +444,7 @@ LIBSSH_API int ssh_init(void);
|
||||
LIBSSH_API int ssh_finalize(void);
|
||||
|
||||
/* misc.c */
|
||||
LIBSSH_API int ssh_mkdir (const char *pathname, mode_t mode);
|
||||
LIBSSH_API char *ssh_dirname (const char *path);
|
||||
LIBSSH_API char *ssh_basename (const char *path);
|
||||
|
||||
|
||||
@@ -1469,7 +1469,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);
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "config.h"
|
||||
@@ -34,6 +35,7 @@
|
||||
#define _WIN32_IE 0x0400 //SHGetSpecialFolderPath
|
||||
#include <winsock2.h> // Must be the first to include
|
||||
#include <shlobj.h>
|
||||
#include <direct.h>
|
||||
#else
|
||||
#include <pwd.h>
|
||||
#include <arpa/inet.h>
|
||||
@@ -347,5 +349,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: */
|
||||
|
||||
Reference in New Issue
Block a user