Bump liberty

This commit is contained in:
2015-07-11 17:54:38 +02:00
parent e57939e705
commit 0c4b727961
5 changed files with 49 additions and 142 deletions

View File

@@ -49,38 +49,6 @@
// --- To be moved to liberty --------------------------------------------------
#define LIST_INSERT_WITH_TAIL(head, tail, link, following) \
BLOCK_START \
if (following) \
LIST_APPEND_WITH_TAIL ((head), (following)->prev, (link)); \
else \
LIST_APPEND_WITH_TAIL ((head), (tail), (link)); \
(link)->next = (following); \
BLOCK_END
#define TRIVIAL_STRXFRM(name, fn) \
static size_t \
name (char *dest, const char *src, size_t n) \
{ \
size_t len = strlen (src); \
while (n-- && (*dest++ = (fn) (*src++))) \
; \
return len; \
}
static void
transform_str (char *s, int (*tolower) (int c))
{
for (; *s; s++)
*s = tolower (*s);
}
static char *
str_cut_until (const char *s, const char *alphabet)
{
return xstrndup (s, strcspn (s, alphabet));
}
static void
split_str (const char *s, char delimiter, struct str_vector *out)
{
@@ -102,71 +70,6 @@ str_vector_find (const struct str_vector *v, const char *s)
return -1;
}
static int
strncasecmp_ascii (const char *a, const char *b, size_t n)
{
int x;
while (n-- && (*a || *b))
if ((x = tolower_ascii (*(const unsigned char *) a++)
- tolower_ascii (*(const unsigned char *) b++)))
return x;
return 0;
}
static int
irc_tolower_strict (int c)
{
if (c == '[') return '{';
if (c == ']') return '}';
if (c == '\\') return '|';
return c >= 'A' && c <= 'Z' ? c + ('a' - 'A') : c;
}
TRIVIAL_STRXFRM (irc_strxfrm_strict, irc_tolower_strict)
static char *
resolve_relative_runtime_filename (const char *filename)
{
struct str path;
str_init (&path);
const char *runtime_dir = getenv ("XDG_RUNTIME_DIR");
if (runtime_dir && *runtime_dir == '/')
str_append (&path, runtime_dir);
else
get_xdg_home_dir (&path, "XDG_DATA_HOME", ".local/share");
str_append_printf (&path, "/%s/%s", PROGRAM_NAME, filename);
// Try to create the file's ancestors
const char *last_slash = strrchr (path.str, '/');
if (last_slash && last_slash != path.str)
{
char *copy = xstrndup (path.str, last_slash - path.str);
(void) mkdir_with_parents (copy, NULL);
free (copy);
}
return str_steal (&path);
}
static char *
resolve_filename (const char *filename, char *(*relative_cb) (const char *))
{
// Absolute path is absolute
if (*filename == '/')
return xstrdup (filename);
// We don't want to use wordexp() for this as it may execute /bin/sh
if (*filename == '~')
{
// Paths to home directories ought to be absolute
char *expanded = try_expand_tilde (filename + 1);
if (expanded)
return expanded;
print_debug ("failed to expand the home directory in `%s'", filename);
}
return relative_cb (filename);
}
// --- Logging -----------------------------------------------------------------
static void