added function to save multiple result selection in restable into files

This commit is contained in:
Jean-Francois Dockes
2013-04-28 09:48:40 +02:00
parent 884234784d
commit caffe8b6f3
7 changed files with 288 additions and 46 deletions
+54 -4
View File
@@ -21,6 +21,7 @@
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>
#include <sys/param.h>
#include <pwd.h>
#include <math.h>
@@ -48,11 +49,10 @@
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <sstream>
#include <stack>
#ifndef NO_NAMESPACES
using std::string;
using std::stack;
#endif /* NO_NAMESPACES */
#include <set>
using namespace std;
#include "pathut.h"
#include "transcode.h"
@@ -274,6 +274,14 @@ string path_basename(const string &s, const string &suff)
return simple;
}
string path_suffix(const string& s)
{
string::size_type dotp = s.rfind('.');
if (dotp == string::npos)
return string();
return s.substr(dotp);
}
string path_home()
{
uid_t uid = getuid();
@@ -543,6 +551,48 @@ bool printableUrl(const string &fcharset, const string &in, string &out)
return true;
}
bool readdir(const string& dir, string& reason, set<string>& entries)
{
struct stat st;
int statret;
ostringstream msg;
DIR *d = 0;
statret = lstat(dir.c_str(), &st);
if (statret == -1) {
msg << "readdir: cant stat " << dir << " errno " << errno;
goto out;
}
if (!S_ISDIR(st.st_mode)) {
msg << "readdir: " << dir << " not a directory";
goto out;
}
if (access(dir.c_str(), R_OK) < 0) {
msg << "readdir: no read access to " << dir;
goto out;
}
d = opendir(dir.c_str());
if (d == 0) {
msg << "readdir: cant opendir " << dir << ", errno " << errno;
goto out;
}
struct dirent *ent;
while ((ent = readdir(d)) != 0) {
if (!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, ".."))
continue;
entries.insert(ent->d_name);
}
out:
if (d)
closedir(d);
reason = msg.str();
if (reason.empty())
return true;
return false;
}
// We do not want to mess with the pidfile content in the destructor:
// the lock might still be in use in a child process. In fact as much
// as we'd like to reset the pid inside the file when we're done, it