X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/7320b695badad72772466e1cc49bb28c20b25ccc..22cb2560274e05e6490cf964cbbeb74a1991c642:/stglibs/common.lib/common.cpp?ds=inline diff --git a/stglibs/common.lib/common.cpp b/stglibs/common.lib/common.cpp index 2b10af26..7bf27397 100644 --- a/stglibs/common.lib/common.cpp +++ b/stglibs/common.lib/common.cpp @@ -32,7 +32,8 @@ // Like FreeBSD4 #include #include -#include +#include +#include #include @@ -751,6 +752,9 @@ 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; @@ -1108,3 +1112,37 @@ std::string ToPrintable(const std::string & src) 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; +}