Bump liberty
This commit is contained in:
97
common.c
97
common.c
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user