Merge pull request #26663 from poettering/vpick

add new "vpick" concept for automatically picking newest resource from .v/ dir containing versioned files
This commit is contained in:
Lennart Poettering
2024-01-03 22:17:32 +01:00
committed by GitHub
30 changed files with 2401 additions and 128 deletions
+22
View File
@@ -516,3 +516,25 @@ const char* inode_type_to_string(mode_t m) {
return NULL;
}
mode_t inode_type_from_string(const char *s) {
if (!s)
return MODE_INVALID;
if (streq(s, "reg"))
return S_IFREG;
if (streq(s, "dir"))
return S_IFDIR;
if (streq(s, "lnk"))
return S_IFLNK;
if (streq(s, "chr"))
return S_IFCHR;
if (streq(s, "blk"))
return S_IFBLK;
if (streq(s, "fifo"))
return S_IFIFO;
if (streq(s, "sock"))
return S_IFSOCK;
return MODE_INVALID;
}
+1
View File
@@ -114,3 +114,4 @@ int inode_compare_func(const struct stat *a, const struct stat *b);
extern const struct hash_ops inode_hash_ops;
const char* inode_type_to_string(mode_t m);
mode_t inode_type_from_string(const char *s);
+23
View File
@@ -1519,3 +1519,26 @@ ssize_t strlevenshtein(const char *x, const char *y) {
return t1[yl];
}
char *strrstr(const char *haystack, const char *needle) {
const char *f = NULL;
size_t l;
/* Like strstr() but returns the last rather than the first occurence of "needle" in "haystack". */
if (!haystack || !needle)
return NULL;
l = strlen(needle);
/* Special case: for the empty string we return the very last possible occurence, i.e. *after* the
* last char, not before. */
if (l == 0)
return strchr(haystack, 0);
for (const char *p = haystack; *p; p++)
if (strncmp(p, needle, l) == 0)
f = p;
return (char*) f;
}
+2
View File
@@ -322,3 +322,5 @@ static inline int strdup_or_null(const char *s, char **ret) {
*ret = c;
return 1;
}
char *strrstr(const char *haystack, const char *needle);
+10
View File
@@ -905,3 +905,13 @@ int _string_strv_ordered_hashmap_put(OrderedHashmap **h, const char *key, const
}
DEFINE_HASH_OPS_FULL(string_strv_hash_ops, char, string_hash_func, string_compare_func, free, char*, strv_free);
char* strv_endswith(const char *s, char **l) {
STRV_FOREACH(i, l) {
char *e = endswith(s, *i);
if (e)
return (char*) e;
}
return NULL;
}
+2
View File
@@ -252,3 +252,5 @@ int _string_strv_hashmap_put(Hashmap **h, const char *key, const char *value HA
int _string_strv_ordered_hashmap_put(OrderedHashmap **h, const char *key, const char *value HASHMAP_DEBUG_PARAMS);
#define string_strv_hashmap_put(h, k, v) _string_strv_hashmap_put(h, k, v HASHMAP_DEBUG_SRC_ARGS)
#define string_strv_ordered_hashmap_put(h, k, v) _string_strv_ordered_hashmap_put(h, k, v HASHMAP_DEBUG_SRC_ARGS)
char* strv_endswith(const char *s, char **l);