[virt-tools-list] [PATCH] Fix regex matching for OS media
Daniel P. Berrange
berrange at redhat.com
Thu Feb 23 11:10:44 UTC 2012
From: "Daniel P. Berrange" <berrange at redhat.com>
The current regex match rule is
If pattern is NULL and string is NULL
-> accept media
else if pattern is NULL or string is NULL
-> reject media
else
-> do regex compare
The regex match rules ought to be
If pattern is NULL
-> accept media
Else if string is NULL
-> reject media
else
-> do regex compare
The idea is that if the Osinfo database pattern is NULL, then
regardless of whether the string is NULL or not, then we should
allow that match. In effect a pattern == NULL, should be treated
as equivalent to a regex ".*"
---
osinfo/osinfo_db.c | 16 ++++++++--------
1 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/osinfo/osinfo_db.c b/osinfo/osinfo_db.c
index ecc8fbd..52c7868 100644
--- a/osinfo/osinfo_db.c
+++ b/osinfo/osinfo_db.c
@@ -30,9 +30,10 @@ G_DEFINE_TYPE (OsinfoDb, osinfo_db, G_TYPE_OBJECT);
#define OSINFO_DB_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), OSINFO_TYPE_DB, OsinfoDbPrivate))
-#define match_regex(pattern, str) (((pattern) == NULL && (str) == NULL) || \
- ((pattern) != NULL && (str) != NULL && \
- g_regex_match_simple((pattern), (str), 0, 0)))
+#define match_regex(pattern, str) \
+ (((pattern) == NULL) || \
+ (((str) != NULL) && \
+ g_regex_match_simple((pattern), (str), 0, 0)))
/**
* SECTION:osinfo_db
@@ -386,11 +387,10 @@ OsinfoOs *osinfo_db_guess_os_from_media(OsinfoDb *db,
const gchar *os_publisher = osinfo_media_get_publisher_id(os_media);
const gchar *os_application = osinfo_media_get_application_id(os_media);
- if ((match_regex (os_volume, media_volume) ||
- match_regex (os_application, media_application))
- &&
- (match_regex (os_system, media_system) ||
- match_regex (os_publisher, media_publisher))) {
+ if (match_regex (os_volume, media_volume) &&
+ match_regex (os_application, media_application) &&
+ match_regex (os_system, media_system) &&
+ match_regex (os_publisher, media_publisher)) {
ret = os;
if (matched_media != NULL)
*matched_media = os_media;
--
1.7.7.6
More information about the virt-tools-list
mailing list