]> git.proxmox.com Git - mirror_frr.git/blobdiff - lib/frrstr.c
Merge pull request #5793 from ton31337/fix/formatting_show_bgp_summary_failed
[mirror_frr.git] / lib / frrstr.c
index 715e67b868c24bbe9adeb945f6aec9986850d3bb..8a72a35af013627e7887a809ca576c7764ce8d57 100644 (file)
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <string.h>
 #include <ctype.h>
 #include <sys/types.h>
@@ -148,24 +152,64 @@ void frrstr_strvec_free(vector v)
        vector_free(v);
 }
 
-bool begins_with(const char *str, const char *prefix)
+char *frrstr_replace(const char *str, const char *find, const char *replace)
+{
+       char *ch;
+       char *nustr = XSTRDUP(MTYPE_TMP, str);
+
+       size_t findlen = strlen(find);
+       size_t repllen = strlen(replace);
+
+       while ((ch = strstr(nustr, find))) {
+               if (repllen > findlen) {
+                       size_t nusz = strlen(nustr) + repllen - findlen + 1;
+                       nustr = XREALLOC(MTYPE_TMP, nustr, nusz);
+                       ch = strstr(nustr, find);
+               }
+
+               size_t nustrlen = strlen(nustr);
+               size_t taillen = (nustr + nustrlen) - (ch + findlen);
+
+               memmove(ch + findlen + (repllen - findlen), ch + findlen,
+                       taillen + 1);
+               memcpy(ch, replace, repllen);
+       }
+
+       return nustr;
+}
+
+bool frrstr_startswith(const char *str, const char *prefix)
 {
        if (!str || !prefix)
-               return 0;
+               return false;
 
        size_t lenstr = strlen(str);
        size_t lenprefix = strlen(prefix);
 
        if (lenprefix > lenstr)
-               return 0;
+               return false;
 
        return strncmp(str, prefix, lenprefix) == 0;
 }
 
+bool frrstr_endswith(const char *str, const char *suffix)
+{
+       if (!str || !suffix)
+               return false;
+
+       size_t lenstr = strlen(str);
+       size_t lensuffix = strlen(suffix);
+
+       if (lensuffix > lenstr)
+               return false;
+
+       return strncmp(&str[lenstr - lensuffix], suffix, lensuffix) == 0;
+}
+
 int all_digit(const char *str)
 {
        for (; *str != '\0'; str++)
-               if (!isdigit((int)*str))
+               if (!isdigit((unsigned char)*str))
                        return 0;
        return 1;
 }