mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
mkdir issues
This commit is contained in:
parent
357fc73101
commit
ac0f84ace1
@ -21,6 +21,7 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <sys/stat.h> // for mkdir()
|
#include <sys/stat.h> // for mkdir()
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <string.h> // strerror()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -54,7 +55,7 @@ get_dirname(const string &filename) {
|
|||||||
// necessary.
|
// necessary.
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
bool
|
bool
|
||||||
mkdir_complete(const string &dirname) {
|
mkdir_complete(const string &dirname, ostream &logfile) {
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (CreateDirectory(dirname.c_str(), NULL) != 0) {
|
if (CreateDirectory(dirname.c_str(), NULL) != 0) {
|
||||||
// Success!
|
// Success!
|
||||||
@ -77,6 +78,8 @@ mkdir_complete(const string &dirname) {
|
|||||||
// Got it!
|
// Got it!
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
logfile
|
||||||
|
<< "Couldn't create " << dirname << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -93,15 +96,18 @@ mkdir_complete(const string &dirname) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (errno == ENOENT) {
|
if (errno == ENOENT || errno == EACCES) {
|
||||||
// We need to make the parent directory first.
|
// We need to make the parent directory first.
|
||||||
string parent = get_dirname(dirname);
|
string parent = get_dirname(dirname);
|
||||||
if (!parent.empty() && mkdir_complete(parent)) {
|
if (!parent.empty() && mkdir_complete(parent, logfile)) {
|
||||||
// Parent successfully created. Try again to make the child.
|
// Parent successfully created. Try again to make the child.
|
||||||
if (mkdir(dirname.c_str(), 0777) == 0) {
|
if (mkdir(dirname.c_str(), 0777) == 0) {
|
||||||
// Got it!
|
// Got it!
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
// Couldn't create the directory. :(
|
||||||
|
logfile
|
||||||
|
<< "Couldn't create " << dirname << ": " << strerror(errno) << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -117,7 +123,7 @@ mkdir_complete(const string &dirname) {
|
|||||||
// needed.
|
// needed.
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
bool
|
bool
|
||||||
mkfile_complete(const string &filename) {
|
mkfile_complete(const string &filename, ostream &logfile) {
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
HANDLE file = CreateFile(filename.c_str(), GENERIC_READ | GENERIC_WRITE,
|
HANDLE file = CreateFile(filename.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
|
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||||
@ -125,13 +131,15 @@ mkfile_complete(const string &filename) {
|
|||||||
if (file == INVALID_HANDLE_VALUE) {
|
if (file == INVALID_HANDLE_VALUE) {
|
||||||
// Try to make the parent directory first.
|
// Try to make the parent directory first.
|
||||||
string parent = get_dirname(filename);
|
string parent = get_dirname(filename);
|
||||||
if (!parent.empty() && mkdir_complete(parent)) {
|
if (!parent.empty() && mkdir_complete(parent, logfile)) {
|
||||||
// Parent successfully created. Try again to make the file.
|
// Parent successfully created. Try again to make the file.
|
||||||
file = CreateFile(filename.c_str(), GENERIC_READ | GENERIC_WRITE,
|
file = CreateFile(filename.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
|
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||||
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
}
|
}
|
||||||
if (file == INVALID_HANDLE_VALUE) {
|
if (file == INVALID_HANDLE_VALUE) {
|
||||||
|
logfile
|
||||||
|
<< "Couldn't create " << filename << "\n";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -143,11 +151,13 @@ mkfile_complete(const string &filename) {
|
|||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
// Try to make the parent directory first.
|
// Try to make the parent directory first.
|
||||||
string parent = get_dirname(filename);
|
string parent = get_dirname(filename);
|
||||||
if (!parent.empty() && mkdir_complete(parent)) {
|
if (!parent.empty() && mkdir_complete(parent, logfile)) {
|
||||||
// Parent successfully created. Try again to make the file.
|
// Parent successfully created. Try again to make the file.
|
||||||
fd = creat(filename.c_str(), 0777);
|
fd = creat(filename.c_str(), 0777);
|
||||||
}
|
}
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
|
logfile
|
||||||
|
<< "Couldn't create " << filename << ": " << strerror(errno) << "\n";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,10 +16,11 @@
|
|||||||
#define MKDIR_COMPLETE_H
|
#define MKDIR_COMPLETE_H
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
bool mkdir_complete(const string &dirname);
|
bool mkdir_complete(const string &dirname, ostream &logfile);
|
||||||
bool mkfile_complete(const string &dirname);
|
bool mkfile_complete(const string &dirname, ostream &logfile);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -46,8 +46,7 @@ set_filename(const string &filename) {
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
bool P3DFileDownload::
|
bool P3DFileDownload::
|
||||||
open_file() {
|
open_file() {
|
||||||
if (!mkfile_complete(_filename)) {
|
if (!mkfile_complete(_filename, nout)) {
|
||||||
nout << "Unable to create " << _filename << "\n";
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#include "p3dNoneObject.h"
|
#include "p3dNoneObject.h"
|
||||||
#include "p3dBoolObject.h"
|
#include "p3dBoolObject.h"
|
||||||
#include "find_root_dir.h"
|
#include "find_root_dir.h"
|
||||||
#include "mkdir_complete.h"
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <shlobj.h>
|
#include <shlobj.h>
|
||||||
|
@ -106,8 +106,7 @@ extract(const string &pathname, const string &to_dir,
|
|||||||
const Subfile &s = (*si);
|
const Subfile &s = (*si);
|
||||||
|
|
||||||
string output_pathname = to_dir + "/" + s._filename;
|
string output_pathname = to_dir + "/" + s._filename;
|
||||||
if (!mkfile_complete(output_pathname)) {
|
if (!mkfile_complete(output_pathname, nout)) {
|
||||||
nout << "Unable to create " << output_pathname << "\n";
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ P3DPackage(const string &package_name, const string &package_version,
|
|||||||
|
|
||||||
// Ensure the package directory exists; create it if it does not.
|
// Ensure the package directory exists; create it if it does not.
|
||||||
_package_dir += string("/") + _package_version;
|
_package_dir += string("/") + _package_version;
|
||||||
mkdir_complete(_package_dir);
|
mkdir_complete(_package_dir, nout);
|
||||||
|
|
||||||
_desc_file_basename = _package_fullname + ".xml";
|
_desc_file_basename = _package_fullname + ".xml";
|
||||||
_desc_file_pathname = _package_dir + "/" + _desc_file_basename;
|
_desc_file_pathname = _package_dir + "/" + _desc_file_basename;
|
||||||
@ -389,8 +389,7 @@ uncompress_archive() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mkfile_complete(target_pathname)) {
|
if (!mkfile_complete(target_pathname, nout)) {
|
||||||
nout << "Unable to create " << target_pathname << "\n";
|
|
||||||
report_done(false);
|
report_done(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -862,7 +862,7 @@ downloaded_plugin(const string &filename) {
|
|||||||
|
|
||||||
// Copy the file onto the target.
|
// Copy the file onto the target.
|
||||||
string pathname = _core_api_dll.get_pathname(_root_dir);
|
string pathname = _core_api_dll.get_pathname(_root_dir);
|
||||||
mkfile_complete(pathname);
|
mkfile_complete(pathname, nout);
|
||||||
|
|
||||||
ifstream in(filename.c_str(), ios::in | ios::binary);
|
ifstream in(filename.c_str(), ios::in | ios::binary);
|
||||||
ofstream out(pathname.c_str(), ios::out | ios::binary);
|
ofstream out(pathname.c_str(), ios::out | ios::binary);
|
||||||
|
@ -299,7 +299,7 @@ get_plugin(const string &root_url, const string &this_platform, bool force_downl
|
|||||||
|
|
||||||
HTTPClient *http = HTTPClient::get_global_ptr();
|
HTTPClient *http = HTTPClient::get_global_ptr();
|
||||||
PT(HTTPChannel) channel = http->get_document(url);
|
PT(HTTPChannel) channel = http->get_document(url);
|
||||||
Ramfile rf;
|
contents.make_dir();
|
||||||
if (!channel->download_to_file(contents)) {
|
if (!channel->download_to_file(contents)) {
|
||||||
cerr << "Unable to download " << url << "\n";
|
cerr << "Unable to download " << url << "\n";
|
||||||
return false;
|
return false;
|
||||||
@ -370,6 +370,7 @@ get_core_api(const string &root_url, TiXmlElement *xpackage) {
|
|||||||
Filename pathname = Filename::from_os_specific(_core_api_dll.get_pathname(_root_dir));
|
Filename pathname = Filename::from_os_specific(_core_api_dll.get_pathname(_root_dir));
|
||||||
HTTPClient *http = HTTPClient::get_global_ptr();
|
HTTPClient *http = HTTPClient::get_global_ptr();
|
||||||
PT(HTTPChannel) channel = http->get_document(url);
|
PT(HTTPChannel) channel = http->get_document(url);
|
||||||
|
pathname.make_dir();
|
||||||
if (!channel->download_to_file(pathname)) {
|
if (!channel->download_to_file(pathname)) {
|
||||||
cerr << "Unable to download " << url << "\n";
|
cerr << "Unable to download " << url << "\n";
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user