diff options
Diffstat (limited to 'lib/Utils/xfuncs.cpp')
-rw-r--r-- | lib/Utils/xfuncs.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/Utils/xfuncs.cpp b/lib/Utils/xfuncs.cpp index 9c8b0f1..533fbfa 100644 --- a/lib/Utils/xfuncs.cpp +++ b/lib/Utils/xfuncs.cpp @@ -321,3 +321,37 @@ int is_regular_file(struct dirent *dent, const char *dirname) return r == 0 && S_ISREG(statbuf.st_mode); } + +/* Is it "." or ".."? */ +/* abrtlib candidate */ +bool dot_or_dotdot(const char *filename) +{ + if (filename[0] != '.') return false; + if (filename[1] == '\0') return true; + if (filename[1] != '.') return false; + if (filename[2] == '\0') return true; + return false; +} + +/* Find out if the last character of a string matches the one given. + * Don't underrun the buffer if the string length is 0. + */ +char *last_char_is(const char *s, int c) +{ + if (s && *s) { + s += strlen(s) - 1; + if ((unsigned char)*s == c) + return (char*)s; + } + return NULL; +} + +std::string concat_path_file(const char *path, const char *filename) +{ + char *lc; + + while (*filename == '/') + filename++; + lc = last_char_is(path, '/'); + return ssprintf("%s%s%s", path, (lc==NULL ? "/" : ""), filename); +} |