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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user