summaryrefslogtreecommitdiffabout
path: root/include
Side-by-side diff
Diffstat (limited to 'include') (more/less context) (ignore whitespace changes)
-rw-r--r--include/sitecing/sitecing_util.h87
1 files changed, 3 insertions, 84 deletions
diff --git a/include/sitecing/sitecing_util.h b/include/sitecing/sitecing_util.h
index d1a6c4a..f642c74 100644
--- a/include/sitecing/sitecing_util.h
+++ b/include/sitecing/sitecing_util.h
@@ -1,341 +1,260 @@
#ifndef __SITECING_SITECING_UTIL_H
#define __SITECING_SITECING_UTIL_H
#include <sys/types.h>
#include <string>
#include <konforka/exception.h>
+#include <konforka/util.h>
/**
* @file
* @brief utility classes and functions.
*/
namespace sitecing {
using namespace std;
/**
* Base class for utility exceptions.
*/
class utility_error : public konforka::exception {
public:
utility_error(const string& fi,const string& fu,int l,const string& w)
: konforka::exception(fi,fu,l,w) { }
};
- /**
- * Restricted sequence encountered.
- */
- class utility_restricted_sequence : public utility_error {
- public:
- utility_restricted_sequence(const string& fi,const string& fu,int l,const string& w)
- : utility_error(fi,fu,l,w) { }
- };
+
/**
* No prefix or suffix found to strip out.
*/
class utility_no_affix : public utility_error {
public:
utility_no_affix(const string& fi,const string& fu,int l,const string& w)
: utility_error(fi,fu,l,w) { }
};
/**
* No prefix to strip found.
*/
class utility_no_prefix : public utility_no_affix {
public:
utility_no_prefix(const string& fi,const string& fu,int l,const string& w)
: utility_no_affix(fi,fu,l,w) { }
};
/**
* No suffix to strip found.
*/
class utility_no_suffix : public utility_no_affix {
public:
utility_no_suffix(const string& fi,const string& fu,int l,const string& w)
: utility_no_affix(fi,fu,l,w) { }
};
/**
- * Went up beyond root.
- * @todo TODO: wish I could remember the details -- document me.
- */
- class utility_beyond_root : public utility_error {
- public:
- utility_beyond_root(const string& fi,const string& fu,int l,const string& w)
- : utility_error(fi,fu,l,w) { }
- };
-
- /**
* The file lock object. Released at the object destruction.
*/
class file_lock {
public:
/**
* The file descriptor.
*/
int fd;
file_lock()
: fd(-1) { }
/**
* @param f file name.
*/
file_lock(const string& f)
: fd(-1) { lock(f); }
~file_lock() { unlock(); }
/**
* Do lock.
* @param f file name.
*/
void lock(const string& f);
/**
* @todo TODO: wish I could remember the details -- document me.
*/
void lock();
/**
* Release the lock obtained.
*/
void unlock();
};
/**
* The pid file. Removed at object destruction.
*/
class pid_file {
public:
/**
* The file name.
*/
string file_name;
/**
* Do we unlink the file after we're done?
*/
bool unlink_pid;
pid_file()
: unlink_pid(false) { }
~pid_file() { unlink(); }
/**
* @param f file name.
* @param u whether we want to unlink the file.
*/
void set(const string& f,bool u=true);
/**
* Unlink the file if we wanted to in the first place.
*/
void unlink();
};
/**
* The semaphore object.
*/
class semaphore {
public:
/**
* The semaphore id.
*/
int semid;
semaphore()
: semid(-1) { }
/**
* @param sid semaphore id.
*/
semaphore(int sid)
: semid(sid) { }
~semaphore() {
deinit();
}
/**
* Init semaphore.
*/
void init();
/**
* Undo the init.
*/
void deinit();
/**
* Semaphore on.
*/
void on();
/**
* Semaphore off.
*/
void off();
};
/**
* The semaphor lock object, released at object destruction.
*/
class semaphore_lock {
public:
/**
* Pointer to the semaphore we're operating on.
*/
semaphore* sem;
/**
* Whether it is locked.
*/
bool locked;
semaphore_lock()
: sem(NULL), locked(false) {}
/**
* @param s pointer to the semaphore.
* @param l lock at creation?
*/
semaphore_lock(semaphore* s,bool l=true)
: sem(s), locked(false) {
if(l) lock();
}
/**
* @param s reference to the semaphore.
* @param l lock at creation?
*/
semaphore_lock(semaphore& s,bool l=true)
: sem(&s), locked(false) {
if(l) lock();
}
~semaphore_lock() {
unlock();
}
/**
* Lock it.
*/
void lock();
/**
* Unlock it.
*/
void unlock();
};
/**
- * normalize_path options enumeration.
- * @see normalize_path()
- */
- enum normalize_path_options {
- /**
- * Restrict the /../ sequence.
- */
- restrict_dotdot = 1,
- /**
- * Strip out the leading slash.
- */
- strip_leading_slash = 2,
- /**
- * Strip out the trailing slash.
- */
- strip_trailing_slash = 4
- };
- /**
- * combine_path options enumeration.
- * @see combine_path()
- */
- enum combine_path_options {
- /**
- * The origin is file. Otherwise it is directory.
- */
- origin_is_file = 1,
- /**
- * Fail if we've gone up beyond root.
- */
- fail_beyond_root = 2
- };
-
- /**
- * Normalize pathname by stripping duplicate slashes, etc.
- * @param path the path name.
- * @param opts options.
- * @return the normalized path.
- * @see normalize_path_options
- * @todo TODO: document exceptions.
- */
- string normalize_path(const string& path,int opts=(restrict_dotdot|strip_trailing_slash));
- /**
* Strip prefix from the string.
* @param str the string.
* @param prefix prefix to strip.
* @return the string without prefix.
* @todo TODO: document exceptions.
*/
string strip_prefix(const string& str,const string& prefix);
/**
* Strip suffix from the string.
* @param str the string.
* @param suffix suffix to strip.
* @return the string without suffix.
* @todo TODO: document exceptions.
*/
string strip_suffix(const string& str,const string& suffix);
- /**
- * Get the directory part of the filename.
- * @param filename the full file name.
- * @return the directory part.
- */
- string dir_name(const string& filename);
- /**
- * Combine path with the relative path.
- * @param origin the origin.
- * @param relative relative path to combine origin with.
- * @param opts options.
- * @return the pathc combined.
- * @see combine_path_options
- * @todo TODO: document exceptions.
- */
- string combine_path(const string& origin,const string& relative,int opts=origin_is_file);
-
- /**
- * Create directory and parent directories if needed.
- * @param path the pathname.
- * @param mode the mode for newly created directories.
- */
- void make_path(const string& path,mode_t mode);
-
+
/**
* Change to the directory and pop back at object's destruction (e.g. when
* the object goes out of scope).
*/
class auto_chdir {
public:
/**
* Saved working directory.
*/
string saved_pwd;
/**
* Whether we want to change back automatically.
*/
bool autopop;
auto_chdir()
: autopop(false) { }
/**
* @param td destination path.
* @param ap automatically come back?
*/
auto_chdir(const string& td,bool ap=true)
: autopop(false) { pushdir(td,ap); }
~auto_chdir() {
if(autopop)
popdir();
}
/**
* Change into directory.
* @param td the directory.
* @param ap automaticall pop back?
*/
void pushdir(const string& td,bool ap=true);
/**
* Change to the saved directory.
*/
void popdir();
};
}
#endif /* __SITECING_SITECING_UTIL_H */