]> err.no Git - util-linux/commitdiff
libmount: add {start,end}swith() functions
authorKarel Zak <kzak@redhat.com>
Thu, 15 Jul 2010 14:00:42 +0000 (16:00 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 3 Jan 2011 11:28:40 +0000 (12:28 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
shlibs/mount/src/Makefile.am
shlibs/mount/src/mountP.h
shlibs/mount/src/utils.c

index 0494a7a049b6266ab990986aaca4e1b2b1078e7c..37a5177e6fab3a43bdbec5ee65817ba75efbc7e7 100644 (file)
@@ -16,7 +16,8 @@ libmount_la_SOURCES = mountP.h version.c utils.c test.c init.c cache.c \
                        $(top_srcdir)/lib/at.c \
                        $(top_srcdir)/include/list.h \
                        $(top_srcdir)/lib/mangle.c \
-                       $(top_srcdir)/lib/canonicalize.c
+                       $(top_srcdir)/lib/canonicalize.c \
+                       $(top_srcdir)/lib/strutils.c
 
 nodist_libmount_la_SOURCES = mountP.h
 
index 1de13917f1a4d35aa6e06d39376e03977c5740d9..04876a0bf15623ce7f9d3598b3587d016b6b2612 100644 (file)
@@ -67,6 +67,9 @@ extern int mnt_run_test(struct mtest *tests, int argc, char *argv[]);
 
 /* utils.c */
 extern char *mnt_getenv_safe(const char *arg);
+extern int endswith(const char *s, const char *sx);
+extern int startswith(const char *s, const char *sx);
+
 extern char *mnt_get_username(const uid_t uid);
 extern int mnt_has_regular_mtab(void);
 
index 67b00c31648baa80d92be2b8543e1d747eedb8c7..eb183ee0f470506f1ab77213006e9bb01d0ff949 100644 (file)
@@ -28,6 +28,7 @@
 #include <fcntl.h>
 #include <pwd.h>
 
+#include "strutils.h"
 #include "pathnames.h"
 #include "mountP.h"
 
@@ -52,6 +53,37 @@ char *mnt_getenv_safe(const char *arg)
 #endif
 }
 
+int endswith(const char *s, const char *sx)
+{
+       ssize_t off;
+
+       assert(s);
+       assert(sx);
+
+       off = strlen(s);
+       if (!off)
+               return 0;
+       off -= strlen(sx);
+       if (off < 0)
+               return 0;
+
+        return !strcmp(s + off, sx);
+}
+
+int startswith(const char *s, const char *sx)
+{
+       size_t off;
+
+       assert(s);
+       assert(sx);
+
+       off = strlen(sx);
+       if (!off)
+               return 0;
+
+        return !strncmp(s, sx, off);
+}
+
 /**
  * mnt_fstype_is_pseudofs:
  * @type: filesystem name
@@ -318,12 +350,32 @@ int test_match_options(struct mtest *ts, int argc, char *argv[])
        return 0;
 }
 
+int test_startswith(struct mtest *ts, int argc, char *argv[])
+{
+       char *optstr = argv[1];
+       char *pattern = argv[2];
+
+       printf("%s\n", startswith(optstr, pattern) ? "YES" : "NOT");
+       return 0;
+}
+
+int test_endswith(struct mtest *ts, int argc, char *argv[])
+{
+       char *optstr = argv[1];
+       char *pattern = argv[2];
+
+       printf("%s\n", endswith(optstr, pattern) ? "YES" : "NOT");
+       return 0;
+}
+
 
 int main(int argc, char *argv[])
 {
        struct mtest tss[] = {
        { "--match-fstype",  test_match_fstype,    "<type> <pattern>     FS types matching" },
        { "--match-options", test_match_options,   "<options> <pattern>  options matching" },
+       { "--starts-with",   test_startswith,      "<string> <prefix>" },
+       { "--ends-with",     test_endswith,        "<string> <prefix>" },
        { NULL }
        };