On 04/09/2014 06:34 PM, Jan Stancek wrote:



----- Original Message -----
From: "gux fnst" <gux.f...@cn.fujitsu.com>
To: ltp-list@lists.sourceforge.net
Sent: Wednesday, 9 April, 2014 5:46:34 AM
Subject: [LTP] [PATCH v3] lib/tst_path_has_mnt_flags.c: create a function 
tst_path_has_mnt_flags()

Create a function tst_path_has_mnt_flags() for checking whether
a path is on a system that is mounted with specified flags.

Signed-off-by: Xing Gu <gux.f...@cn.fujitsu.com>
---
  include/test.h               |  9 +++++
  lib/tst_path_has_mnt_flags.c | 79
  ++++++++++++++++++++++++++++++++++++++++++++
  2 files changed, 88 insertions(+)

+
+               prefix_len = strlen(mnt->mnt_dir);
+
+               if (strncmp(path, mnt->mnt_dir, prefix_len) == 0
+                               && prefix_len > prefix_max) {
+                       prefix_max = prefix_len;
+                       has_opt = 0;
+                       i = 0;
+                       while ((has_opt == 0) && (flags[i] != NULL)) {
+                               has_opt = hasmntopt(mnt, flags[i]) != NULL;
+                               i++;
+                       }
+                       has_flags = has_opt;
+               }
+       }
+
+       endmntent(f);
+
+       return has_flags;
+}
This function looks OK for one testcase that needs to check for
OR logic between flags. I was thinking, whether we should change
this function to return number matched flags. That way we could
also check easily for AND logic (matches all flags) if we need
that in future.


   * Returns:
   *   -1 - an error has occurred
   *   0 - the filesystem does not have any specified flags
- *   1 - the filesystem has at least one flag matched
+ *   1..n - number of flags matched
   */
  int tst_path_has_mnt_flags(const char *path, const char *flags[])
  {
         struct mntent *mnt;
         size_t prefix_max = 0, prefix_len;
-       int has_flags = 0, has_opt;
+       int flags_matched = 0;
         FILE *f;
         int i;
@@ -63,17 +65,24 @@ int tst_path_has_mnt_flags(const char *path, const char *flags[])
                 if (strncmp(path, mnt->mnt_dir, prefix_len) == 0
                                 && prefix_len > prefix_max) {
                         prefix_max = prefix_len;
-                       has_opt = 0;
+                       flags_matched = 0;
                         i = 0;
-                       while ((has_opt == 0) && (flags[i] != NULL)) {
-                               has_opt = hasmntopt(mnt, flags[i]) != NULL;
+                       while (flags[i] != NULL) {
+                               if (hasmntopt(mnt, flags[i]) != NULL)
+                                       flags_matched++;
                                 i++;
                         }
-                       has_flags = has_opt;
                 }
         }
endmntent(f); - return has_flags;
+       return flags_matched;
+}

What do you think?

Thanks for your suggestion. It is very helpfull.
I will send a new version today.

Regards,
Xing Gu

Regards,
Jan

--
1.8.3.1
------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

.


------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to