#ifdef HAVE_REGEX_H
# include <regex.h>
#endif
+#include <pwd.h>
typedef struct {
int condition;
return FALSE;
for (;;) {
- while (isspace((gint) *list)) list++;
+ while (i_isspace(*list)) list++;
if (*list == '\0') break;
ptr = strchr(list, ' ');
if (key[pos] == '\0')
return (char *) data;
- if (toupper(data[pos]) == toupper(key[pos]))
+ if (i_toupper(data[pos]) == i_toupper(key[pos]))
pos++;
else {
data++;
#define isbound(c) \
((unsigned char) (c) < 128 && \
- (isspace((int) (c)) || ispunct((int) (c))))
+ (i_isspace(c) || i_ispunct(c)))
char *strstr_full_case(const char *data, const char *key, int icase)
{
return (char *) data;
}
- match = icase ? (toupper(data[pos]) == toupper(key[pos])) :
+ match = icase ? (i_toupper(data[pos]) == i_toupper(key[pos])) :
data[pos] == key[pos];
if (match && (pos != 0 || data == start || isbound(data[-1])))
dir = g_strndup(path, (int) (p-path));
if (stat(dir, &statbuf) != 0) {
#ifndef WIN32
- if (mkdir(dir, mode) == -1) {
+ if (mkdir(dir, mode) == -1)
#else
- if (_mkdir(dir) == -1) {
+ if (_mkdir(dir) == -1)
#endif
+ {
g_free(dir);
return -1;
}
return 0;
}
+/* Get home directory */
+const char *get_home_dir(void)
+{
+ struct passwd *pw = getpwuid(getuid());
+ if (!pw) {
+ if (g_getenv("HOME"))
+ return g_getenv("HOME");
+ else
+ return ".";
+ }
+ return pw->pw_dir;
+}
+
/* convert ~/ to $HOME */
char *convert_home(const char *path)
{
return *path == '~' && (*(path+1) == '/' || *(path+1) == '\0') ?
- g_strconcat(g_get_home_dir(), path+1, NULL) :
+ g_strconcat((char *)get_home_dir, path+1, NULL) :
g_strdup(path);
}
unsigned int h = 0, g;
while (*s != '\0') {
- h = (h << 4) + toupper(*s);
+ h = (h << 4) + i_toupper(*s);
if ((g = h & 0xf0000000UL)) {
h = h ^ (g >> 24);
h = h ^ g;
newmask = mask = g_strdup(cmask);
for (; *mask != '\0' && *data != '\0'; mask++) {
if (*mask != '*') {
- if (*mask != '?' && toupper(*mask) != toupper(*data))
+ if (*mask != '?' && i_toupper(*mask) != i_toupper(*data))
break;
data++;
return FALSE;
while (*str != '\0' && *str != end_char) {
- if (!isdigit(*str)) return FALSE;
+ if (!i_isdigit(*str)) return FALSE;
str++;
}
item_pos++;
}
- for (n = max_columns-1; n > 1; n--) {
+ for (n = max_columns-1; n >= 1; n--) {
if (columns_width[n] <= max_width &&
columns[n][n] > 0)
break;
g_slist_length(list), sorted);
return sorted;
}
+
+/* Expand escape string, the first character in data should be the
+ one after '\'. Returns the expanded character or -1 if error. */
+int expand_escape(const char **data)
+{
+ char digit[4];
+
+ switch (**data) {
+ case 't':
+ return '\t';
+ case 'r':
+ return '\r';
+ case 'n':
+ return '\n';
+ case 'e':
+ return 27; /* ESC */
+
+ case 'x':
+ /* hex digit */
+ if (!i_isxdigit((*data)[1]) || !i_isxdigit((*data)[2]))
+ return -1;
+
+ digit[0] = (*data)[1];
+ digit[1] = (*data)[2];
+ digit[2] = '\0';
+ *data += 2;
+ return strtol(digit, NULL, 16);
+ case 'c':
+ /* control character (\cA = ^A) */
+ (*data)++;
+ return i_toupper(**data) - 64;
+ default:
+ if (!i_isdigit(**data))
+ return -1;
+
+ /* octal */
+ digit[0] = (*data)[0];
+ digit[1] = (*data)[1];
+ digit[2] = (*data)[2];
+ digit[3] = '\0';
+ *data += 2;
+ return strtol(digit, NULL, 8);
+ }
+}