1 /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
6 #include "base/i2-base.hpp"
7 #include "base/string.hpp"
8 #include "base/array.hpp"
9 #include "base/threadpool.hpp"
10 #include <boost/thread/tss.hpp>
18 #define MS_VC_EXCEPTION 0x406D1388
20 # pragma pack(push, 8)
21 struct THREADNAME_INFO
45 static String DemangleSymbolName(const String& sym);
46 static String GetTypeName(const std::type_info& ti);
47 static String GetSymbolName(const void *addr);
49 static bool Match(const String& pattern, const String& text);
50 static bool CidrMatch(const String& pattern, const String& ip);
52 static String DirName(const String& path);
53 static String BaseName(const String& path);
55 static String GetEnv(const String& key);
57 static void NullDeleter(void *);
59 static double GetTime();
61 static pid_t GetPid();
63 static void Sleep(double timeout);
65 static String NewUniqueID();
67 static bool Glob(const String& pathSpec, const std::function<void (const String&)>& callback, int type = GlobFile | GlobDirectory);
68 static bool GlobRecursive(const String& path, const String& pattern, const std::function<void (const String&)>& callback, int type = GlobFile | GlobDirectory);
69 static void MkDir(const String& path, int mode);
70 static void MkDirP(const String& path, int mode);
71 static bool SetFileOwnership(const String& file, const String& user, const String& group);
73 static void QueueAsyncCallback(const std::function<void ()>& callback, SchedulerPolicy policy = DefaultScheduler);
75 static String NaturalJoin(const std::vector<String>& tokens);
76 static String Join(const Array::Ptr& tokens, char separator, bool escapeSeparator = true);
78 static String FormatDuration(double duration);
79 static String FormatDateTime(const char *format, double ts);
80 static String FormatErrorNumber(int code);
83 static void SetNonBlocking(int fd, bool nb = true);
84 static void SetCloExec(int fd, bool cloexec = true);
87 static void SetNonBlockingSocket(SOCKET s, bool nb = true);
89 static String EscapeShellCmd(const String& s);
90 static String EscapeShellArg(const String& s);
92 static String EscapeCreateProcessArg(const String& arg);
95 static String EscapeString(const String& s, const String& chars, const bool illegal);
96 static String UnescapeString(const String& s);
98 static void SetThreadName(const String& name, bool os = true);
99 static String GetThreadName();
101 static unsigned long SDBM(const String& str, size_t len = String::NPos);
103 static int CompareVersion(const String& v1, const String& v2);
107 static String GetHostName();
108 static String GetFQDN();
110 static tm LocalTime(time_t ts);
112 static bool PathExists(const String& path);
114 static void Remove(const String& path);
115 static void RemoveDirRecursive(const String& path);
116 static void CopyFile(const String& source, const String& target);
117 static void RenameFile(const String& source, const String& target);
119 static Value LoadJsonFile(const String& path);
120 static void SaveJsonFile(const String& path, int mode, const Value& value);
122 static String GetPlatformKernel();
123 static String GetPlatformKernelVersion();
124 static String GetPlatformName();
125 static String GetPlatformVersion();
126 static String GetPlatformArchitecture();
128 static String ValidateUTF8(const String& input);
130 static String CreateTempFile(const String& path, int mode, std::fstream& fp);
133 static String GetIcingaInstallPath();
134 static String GetIcingaDataPath();
137 static String GetFromEnvironment(const String& env);
139 static bool ComparePasswords(const String& enteredPassword, const String& actualPassword);
142 static void SetTime(double);
143 static void IncrementTime(double);
144 #endif /* I2_DEBUG */
150 static int MksTemp (char *tmpl);
154 static double m_DebugTime;
155 #endif /* I2_DEBUG */
157 static boost::thread_specific_ptr<String> m_ThreadName;
158 static boost::thread_specific_ptr<unsigned int> m_RandSeed;
163 #endif /* UTILITY_H */