mirror of
https://github.com/pdf2htmlEX/pdf2htmlEX.git
synced 2024-12-22 13:00:08 +00:00
Added an option to specify the base temporary directory
This commit is contained in:
parent
d4d86ca3fe
commit
589047144a
@ -41,33 +41,10 @@ using namespace pdf2htmlEX;
|
|||||||
|
|
||||||
Param param;
|
Param param;
|
||||||
ArgParser argparser;
|
ArgParser argparser;
|
||||||
string data_dir;
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <errno.h>
|
# include <iomanip>
|
||||||
#include <libgen.h>
|
# include <libgen.h>
|
||||||
char *mkdtemp(char *tempbuf) {
|
|
||||||
int rand_value = 0;
|
|
||||||
char* tempbase = NULL;
|
|
||||||
char tempbasebuf[MAX_PATH] = "";
|
|
||||||
|
|
||||||
if (strcmp(&tempbuf[strlen(tempbuf)-6], "XXXXXX")) {
|
|
||||||
errno = EINVAL;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
srand((unsigned)time(0));
|
|
||||||
rand_value = (int)((rand() / ((double)RAND_MAX+1.0)) * 1e6);
|
|
||||||
tempbase = strrchr(tempbuf, '/');
|
|
||||||
tempbase = tempbase ? tempbase+1 : tempbuf;
|
|
||||||
strcpy(tempbasebuf, tempbase);
|
|
||||||
sprintf(&tempbasebuf[strlen(tempbasebuf)-6], "%d", rand_value);
|
|
||||||
::GetTempPath(MAX_PATH, tempbuf);
|
|
||||||
strcat(tempbuf, tempbasebuf);
|
|
||||||
::CreateDirectory(tempbuf, NULL);
|
|
||||||
return tempbuf;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void deprecated_font_suffix(const char * dummy = nullptr)
|
void deprecated_font_suffix(const char * dummy = nullptr)
|
||||||
@ -94,7 +71,7 @@ void show_version_and_exit(const char * dummy = nullptr)
|
|||||||
cerr << " cairo " << cairo_version_string() << endl;
|
cerr << " cairo " << cairo_version_string() << endl;
|
||||||
#endif
|
#endif
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
cerr << "Default data-dir: " << data_dir << endl;
|
cerr << "Default data-dir: " << param.data_dir << endl;
|
||||||
#else
|
#else
|
||||||
cerr << "Default data-dir: " << PDF2HTMLEX_DATA_PATH << endl;
|
cerr << "Default data-dir: " << PDF2HTMLEX_DATA_PATH << endl;
|
||||||
#endif
|
#endif
|
||||||
@ -138,6 +115,39 @@ void embed_parser (const char * str)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void prepare_directories()
|
||||||
|
{
|
||||||
|
std::string tmp_dir = param.basetmp_dir + "/pdf2htmlEX-XXXXXX";
|
||||||
|
#ifndef _WIN32
|
||||||
|
errno = 0;
|
||||||
|
|
||||||
|
auto_ptr<char> pBuf(new char[tmp_dir.size() + 1]);
|
||||||
|
strcpy(pBuf.get(), tmp_dir.c_str());
|
||||||
|
auto p = mkdtemp(pBuf.get());
|
||||||
|
if(p == nullptr)
|
||||||
|
{
|
||||||
|
const char * errmsg = strerror(errno);
|
||||||
|
if(!errmsg)
|
||||||
|
{
|
||||||
|
errmsg = "unknown error";
|
||||||
|
}
|
||||||
|
cerr << "Cannot create temp directory: " << errmsg << endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
param.tmp_dir = pBuf.get();
|
||||||
|
#else
|
||||||
|
srand((unsigned)time(0));
|
||||||
|
int rand_value = (int)((rand() / ((double)RAND_MAX+1.0)) * 1e6);
|
||||||
|
stringstream ss;
|
||||||
|
ss << setw(6) << rand_value;
|
||||||
|
|
||||||
|
std::cout << "1- " << tmp_dir << endl;
|
||||||
|
tmp_dir.erase(tmp_dir.size() - 6);
|
||||||
|
param.tmp_dir = tmp_dir + ss.str();
|
||||||
|
::CreateDirectory(param.tmp_dir.c_str(), NULL);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void parse_options (int argc, char **argv)
|
void parse_options (int argc, char **argv)
|
||||||
{
|
{
|
||||||
argparser
|
argparser
|
||||||
@ -200,8 +210,9 @@ void parse_options (int argc, char **argv)
|
|||||||
|
|
||||||
// misc.
|
// misc.
|
||||||
.add("clean-tmp", ¶m.clean_tmp, 1, "remove temporary files after conversion")
|
.add("clean-tmp", ¶m.clean_tmp, 1, "remove temporary files after conversion")
|
||||||
|
.add("base-tmp-dir", ¶m.basetmp_dir, param.basetmp_dir, "base temporary directory - will create pdf2htmlEX-XXXXXX under it")
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
.add("data-dir", ¶m.data_dir, data_dir, "specify data directory")
|
.add("data-dir", ¶m.data_dir, param.data_dir, "specify data directory")
|
||||||
#else
|
#else
|
||||||
.add("data-dir", ¶m.data_dir, PDF2HTMLEX_DATA_PATH, "specify data directory")
|
.add("data-dir", ¶m.data_dir, PDF2HTMLEX_DATA_PATH, "specify data directory")
|
||||||
#endif
|
#endif
|
||||||
@ -353,12 +364,19 @@ void check_param()
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifndef _WIN32
|
||||||
|
param.basetmp_dir = "/tmp";
|
||||||
|
#else
|
||||||
{
|
{
|
||||||
// Under Windows, the default data_dir is under /data in the pdf2htmlEX directory
|
// Under Windows, the default data_dir is under /data in the pdf2htmlEX directory
|
||||||
stringstream ss;
|
stringstream ss;
|
||||||
ss << dirname(argv[0]) << "/data";
|
ss << dirname(argv[0]) << "/data";
|
||||||
data_dir = ss.str();
|
param.data_dir = ss.str();
|
||||||
|
|
||||||
|
// Under Windows, the temp path is not under /tmp, find it.
|
||||||
|
char temppath[MAX_PATH];
|
||||||
|
::GetTempPath(MAX_PATH, temppath);
|
||||||
|
param.basetmp_dir = temppath;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -366,26 +384,13 @@ int main(int argc, char **argv)
|
|||||||
check_param();
|
check_param();
|
||||||
|
|
||||||
//prepare the directories
|
//prepare the directories
|
||||||
{
|
prepare_directories();
|
||||||
char buf[] = "/tmp/pdf2htmlEX-XXXXXX";
|
|
||||||
errno = 0;
|
if(param.debug) {
|
||||||
auto p = mkdtemp(buf);
|
cerr << "temporary dir: " << (param.tmp_dir) << endl;
|
||||||
if(p == nullptr)
|
|
||||||
{
|
|
||||||
const char * errmsg = strerror(errno);
|
|
||||||
if(!errmsg)
|
|
||||||
{
|
|
||||||
errmsg = "unknown error";
|
|
||||||
}
|
|
||||||
cerr << "Cannot create temp directory: " << errmsg << endl;
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
param.tmp_dir = buf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(param.debug)
|
exit(0);
|
||||||
cerr << "temporary dir: " << (param.tmp_dir) << endl;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
create_directories(param.dest_dir);
|
create_directories(param.dest_dir);
|
||||||
|
Loading…
Reference in New Issue
Block a user