src/util.cc (raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- #ifdef HAVE_CONFIG_H # include "../config.h" #endif // HAVE_CONFIG_H extern "C" { #include <X11/Xatom.h> #ifdef HAVE_STRING_H #include <string.h> #endif #ifdef HAVE_STDLIB_H #include <stdlib.h> #endif #ifdef HAVE_UNISTD_H #include <unistd.h> #endif // HAVE_UNISTD_H #if defined(HAVE_PROCESS_H) && defined(__EMX__) # include <process.h> #endif // HAVE_PROCESS_H __EMX__ #include <assert.h> } #include <algorithm> #include "util.hh" using std::string; namespace ob { string expandTilde(const string& s) { if (s[0] != '~') return s; const char* const home = getenv("HOME"); if (home == NULL) return s; return string(home + s.substr(s.find('/'))); } void bexec(const string& command, const string& displaystring) { #ifndef __EMX__ if (! fork()) { setsid(); int ret = putenv(const_cast<char *>(displaystring.c_str())); assert(ret != -1); ret = execl("/bin/sh", "/bin/sh", "-c", command.c_str(), NULL); exit(ret); } #else // __EMX__ spawnlp(P_NOWAIT, "cmd.exe", "cmd.exe", "/c", command.c_str(), NULL); #endif // !__EMX__ } string textPropertyToString(Display *display, XTextProperty& text_prop) { string ret; if (text_prop.value && text_prop.nitems > 0) { if (text_prop.encoding == XA_STRING) { ret = (char *) text_prop.value; } else { text_prop.nitems = strlen((char *) text_prop.value); char **list; int num; if (XmbTextPropertyToTextList(display, &text_prop, &list, &num) == Success && num > 0 && *list) { ret = *list; XFreeStringList(list); } } } return ret; } timeval normalizeTimeval(const timeval &tm) { timeval ret = tm; while (ret.tv_usec < 0) { if (ret.tv_sec > 0) { --ret.tv_sec; ret.tv_usec += 1000000; } else { ret.tv_usec = 0; } } if (ret.tv_usec >= 1000000) { ret.tv_sec += ret.tv_usec / 1000000; ret.tv_usec %= 1000000; } if (ret.tv_sec < 0) ret.tv_sec = 0; return ret; } string itostring(unsigned long i) { if (i == 0) return string("0"); string tmp; for (; i > 0; i /= 10) tmp.insert(tmp.begin(), "0123456789"[i%10]); return tmp; } string itostring(long i) { std::string tmp = itostring( (unsigned long) std::abs(i)); if (i < 0) tmp.insert(tmp.begin(), '-'); return tmp; } } #ifndef HAVE_BASENAME string basename (const string& path) { string::size_type slash = path.rfind('/'); if (slash == string::npos) return path; return path.substr(slash+1); } #endif // HAVE_BASENAME |