]> git.stg.codes - stg.git/commitdiff
Merge branch 'stg-2.409' into stg-2.409-radius
authorMaxim Mamontov <faust.madf@gmail.com>
Thu, 22 Dec 2016 19:46:27 +0000 (21:46 +0200)
committerMaxim Mamontov <faust.madf@gmail.com>
Thu, 22 Dec 2016 19:46:27 +0000 (21:46 +0200)
1  2 
stglibs/common.lib/common.cpp
stglibs/common.lib/include/stg/common.h

index b527ac588b9ff5d3f2c983b3e967b476b90733dd,fc7c35ce86c5b19eebc1a569c3120ae2e1fc2ce2..7bf27397f38e419a2904f2311ce6b29f64968a40
@@@ -32,8 -32,7 +32,8 @@@
  // Like FreeBSD4
  #include <sys/types.h>
  #include <sys/time.h>
 -#include <unistd.h>
 +#include <pwd.h>
 +#include <grp.h>
  
  #include <sys/select.h>
  
@@@ -734,6 -733,38 +734,38 @@@ void SwapBytes(int64_t & value
      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));
@@@ -1080,37 -1111,3 +1112,37 @@@ std::string ToPrintable(const std::stri
  
      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;
 +}
index a20c3d9fe068ce2e774ddf4fdf683734b79d4413,8e82d2a84e17b099ef63a8b0ad288cc3bdc66c06..d404e013a824332976699956b036392f701d579b
  #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)
@@@ -148,6 -150,8 +149,8 @@@ bool WriteAll(int sd, const void * sour
  
  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);
@@@ -299,8 -303,4 +302,8 @@@ const std::string & unsigned2str(varT 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