// Like FreeBSD4
#include <sys/types.h>
#include <sys/time.h>
-#include <unistd.h>
+#include <pwd.h>
+#include <grp.h>
#include <sys/select.h>
value = temp;
}
//---------------------------------------------------------------------------
+ std::string formatTime(time_t ts)
+ {
+ char buf[32];
+ struct tm brokenTime;
+
+ brokenTime.tm_wday = 0;
+ brokenTime.tm_yday = 0;
+ brokenTime.tm_isdst = 0;
+
+ gmtime_r(&ts, &brokenTime);
+
+ strftime(buf, 32, "%Y-%m-%d %H:%M:%S", &brokenTime);
+
+ return buf;
+ }
+ //---------------------------------------------------------------------------
+ time_t readTime(const std::string & ts)
+ {
+ if (ts == "0000-00-00 00:00:00")
+ return 0;
+
+ struct tm brokenTime;
+
+ brokenTime.tm_wday = 0;
+ brokenTime.tm_yday = 0;
+ brokenTime.tm_isdst = 0;
+
+ stg_strptime(ts.c_str(), "%Y-%m-%d %H:%M:%S", &brokenTime);
+
+ return stg_timegm(&brokenTime);
+ }
+ //---------------------------------------------------------------------------
int str2x(const std::string & str, int32_t & x)
{
x = static_cast<int32_t>(strtol(str.c_str(), NULL, 10));
return dest;
}
+
+uid_t str2uid(const std::string& name)
+{
+ const passwd* res = getpwnam(name.c_str());
+ if (res == NULL)
+ return -1;
+ return res->pw_uid;
+}
+
+gid_t str2gid(const std::string& name)
+{
+ const group* res = getgrnam(name.c_str());
+ if (res == NULL)
+ return -1;
+ return res->gr_gid;
+}
+
+mode_t str2mode(const std::string& name)
+{
+ if (name.length() < 3 || name.length() > 4)
+ return -1;
+
+ if (name.length() == 4 && name[0] != '0')
+ return -1;
+
+ mode_t res = 0;
+ for (size_t i = 0; i < name.length(); ++i)
+ {
+ if (name[i] > '7' || name[i] < '0')
+ return -1;
+ res = (res << 3) + (name[i] - '0');
+ }
+ return res;
+}
#ifndef common_h
#define common_h
-#ifdef __BORLANDC__
-#include <time.h>
-#else
-#include <ctime>
-#include <climits> // NAME_MAX
-#endif
+#include "stg/os_int.h"
+#include "stg/const.h"
+
#include <string>
#include <sstream>
+#include <ctime>
++#include <climits> // NAME_MAX
-#include "stg/os_int.h"
-#include "stg/const.h"
+#include <unistd.h> // uid_t, gid_t
+#include <sys/stat.h> // mode_t
#define STAT_TIME_3 (1)
#define STAT_TIME_2 (2)
std::string ToPrintable(const std::string & src);
+ std::string formatTime(time_t value);
+ time_t readTime(const std::string & value);
//-----------------------------------------------------------------------------
int str2x(const std::string & str, int32_t & x);
int str2x(const std::string & str, uint32_t & x);
char * stg_strptime(const char *, const char *, struct tm *);
time_t stg_timegm(struct tm *);
+uid_t str2uid(const std::string& name);
+gid_t str2gid(const std::string& name);
+mode_t str2mode(const std::string& mode);
+
#endif