2009-09-14 01:07:32 +00:00
|
|
|
|
|
|
|
#ifndef __auto_temp_file_hh
|
|
|
|
#define __auto_temp_file_hh
|
|
|
|
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
class auto_temp_file {
|
|
|
|
public:
|
|
|
|
auto_temp_file(const char *cpat = NULL) {
|
|
|
|
this->reset(cpat);
|
|
|
|
};
|
|
|
|
|
|
|
|
auto_temp_file(auto_temp_file &atf) : atf_name(atf.release()) { };
|
|
|
|
|
|
|
|
~auto_temp_file() { this->reset(); };
|
|
|
|
|
|
|
|
operator std::string(void) const { return this->atf_name; };
|
|
|
|
|
|
|
|
auto_temp_file &operator=(const char *cpat) {
|
|
|
|
this->reset(cpat);
|
|
|
|
return *this;
|
|
|
|
};
|
|
|
|
|
|
|
|
auto_temp_file &operator=(auto_temp_file &atf) {
|
|
|
|
this->reset();
|
|
|
|
this->atf_name = atf.release();
|
|
|
|
return *this;
|
|
|
|
};
|
|
|
|
|
|
|
|
std::string release(void) {
|
|
|
|
std::string retval = this->atf_name;
|
|
|
|
|
|
|
|
this->atf_name.clear();
|
|
|
|
return retval;
|
|
|
|
};
|
|
|
|
|
|
|
|
void reset(const char *cpat = NULL) {
|
|
|
|
if (!this->atf_name.empty()) {
|
|
|
|
unlink(this->atf_name.c_str());
|
|
|
|
this->atf_name.clear();
|
|
|
|
}
|
|
|
|
if (cpat != NULL) {
|
|
|
|
char *pat = (char *)alloca(strlen(cpat) + 1); /* XXX */
|
|
|
|
|
|
|
|
strcpy(pat, cpat);
|
2009-10-14 19:42:58 +00:00
|
|
|
if (mktemp(pat) == NULL)
|
|
|
|
perror("mktemp");
|
2009-09-14 01:07:32 +00:00
|
|
|
this->atf_name = pat;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
private:
|
|
|
|
std::string atf_name;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|