[kdbus] Add initial support for receiving messages
[platform/upstream/glib.git] / glib / gpattern.c
index 938083e..aa04502 100644 (file)
@@ -12,9 +12,7 @@
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "config.h"
 #include "gmem.h"
 #include "gunicode.h"
 #include "gutils.h" 
-#include "galias.h"
+
+/**
+ * SECTION:patterns
+ * @title: Glob-style pattern matching
+ * @short_description: matches strings against patterns containing '*'
+ *                     (wildcard) and '?' (joker)
+ *
+ * The g_pattern_match* functions match a string
+ * against a pattern containing '*' and '?' wildcards with similar
+ * semantics as the standard glob() function: '*' matches an arbitrary,
+ * possibly empty, string, '?' matches an arbitrary character.
+ *
+ * Note that in contrast to glob(), the '/' character can be matched by
+ * the wildcards, there are no '[...]' character ranges and '*' and '?'
+ * can not be escaped to include them literally in a pattern.
+ *
+ * When multiple strings must be matched against the same pattern, it
+ * is better to compile the pattern to a #GPatternSpec using
+ * g_pattern_spec_new() and use g_pattern_match_string() instead of
+ * g_pattern_match_simple(). This avoids the overhead of repeated
+ * pattern compilation.
+ **/
+
+/**
+ * GPatternSpec:
+ *
+ * A GPatternSpec struct is the 'compiled' form of a pattern. This
+ * structure is opaque and its fields cannot be accessed directly.
+ */
 
 /* keep enum and structure of gpattern.c and patterntest.c in sync */
 typedef enum
@@ -57,8 +83,8 @@ g_pattern_ph_match (const gchar *match_pattern,
                    const gchar *match_string,
                    gboolean    *wildcard_reached_p)
 {
-  register const gchar *pattern, *string;
-  register gchar ch;
+  const gchar *pattern, *string;
+  gchar ch;
 
   pattern = match_pattern;
   string = match_string;
@@ -130,6 +156,34 @@ g_pattern_ph_match (const gchar *match_pattern,
   return *string == 0;
 }
 
+/**
+ * g_pattern_match:
+ * @pspec: a #GPatternSpec
+ * @string_length: the length of @string (in bytes, i.e. strlen(),
+ *     not g_utf8_strlen())
+ * @string: the UTF-8 encoded string to match
+ * @string_reversed: (allow-none): the reverse of @string or %NULL
+ *
+ * Matches a string against a compiled pattern. Passing the correct
+ * length of the string given is mandatory. The reversed string can be
+ * omitted by passing %NULL, this is more efficient if the reversed
+ * version of the string to be matched is not at hand, as
+ * g_pattern_match() will only construct it if the compiled pattern
+ * requires reverse matches.
+ *
+ * Note that, if the user code will (possibly) match a string against a
+ * multitude of patterns containing wildcards, chances are high that
+ * some patterns will require a reversed string. In this case, it's
+ * more efficient to provide the reversed string to avoid multiple
+ * constructions thereof in the various calls to g_pattern_match().
+ *
+ * Note also that the reverse of a UTF-8 encoded string can in general
+ * not be obtained by g_strreverse(). This works only if the string
+ * does not contain any multibyte characters. GLib offers the
+ * g_utf8_strreverse() function to reverse UTF-8 encoded strings.
+ *
+ * Returns: %TRUE if @string matches @pspec
+ **/
 gboolean
 g_pattern_match (GPatternSpec *pspec,
                 guint         string_length,
@@ -183,6 +237,14 @@ g_pattern_match (GPatternSpec *pspec,
     }
 }
 
+/**
+ * g_pattern_spec_new:
+ * @pattern: a zero-terminated UTF-8 encoded string
+ *
+ * Compiles a pattern to a #GPatternSpec.
+ *
+ * Returns: a newly-allocated #GPatternSpec
+ **/
 GPatternSpec*
 g_pattern_spec_new (const gchar *pattern)
 {
@@ -291,6 +353,12 @@ g_pattern_spec_new (const gchar *pattern)
   return pspec;
 }
 
+/**
+ * g_pattern_spec_free:
+ * @pspec: a #GPatternSpec
+ *
+ * Frees the memory allocated for the #GPatternSpec.
+ **/
 void
 g_pattern_spec_free (GPatternSpec *pspec)
 {
@@ -300,6 +368,16 @@ g_pattern_spec_free (GPatternSpec *pspec)
   g_free (pspec);
 }
 
+/**
+ * g_pattern_spec_equal:
+ * @pspec1: a #GPatternSpec
+ * @pspec2: another #GPatternSpec
+ *
+ * Compares two compiled pattern specs and returns whether they will
+ * match the same set of strings.
+ *
+ * Returns: Whether the compiled patterns are equal
+ **/
 gboolean
 g_pattern_spec_equal (GPatternSpec *pspec1,
                      GPatternSpec *pspec2)
@@ -312,6 +390,17 @@ g_pattern_spec_equal (GPatternSpec *pspec1,
          strcmp (pspec1->pattern, pspec2->pattern) == 0);
 }
 
+/**
+ * g_pattern_match_string:
+ * @pspec: a #GPatternSpec
+ * @string: the UTF-8 encoded string to match
+ *
+ * Matches a string against a compiled pattern. If the string is to be
+ * matched against more than one pattern, consider using
+ * g_pattern_match() instead while supplying the reversed string.
+ *
+ * Returns: %TRUE if @string matches @pspec
+ **/
 gboolean
 g_pattern_match_string (GPatternSpec *pspec,
                        const gchar  *string)
@@ -322,6 +411,18 @@ g_pattern_match_string (GPatternSpec *pspec,
   return g_pattern_match (pspec, strlen (string), string, NULL);
 }
 
+/**
+ * g_pattern_match_simple:
+ * @pattern: the UTF-8 encoded pattern
+ * @string: the UTF-8 encoded string to match
+ *
+ * Matches a string against a pattern given as a string. If this
+ * function is to be called in a loop, it's more efficient to compile
+ * the pattern once with g_pattern_spec_new() and call
+ * g_pattern_match_string() repeatedly.
+ *
+ * Returns: %TRUE if @string matches @pspec
+ **/
 gboolean
 g_pattern_match_simple (const gchar *pattern,
                        const gchar *string)
@@ -338,6 +439,3 @@ g_pattern_match_simple (const gchar *pattern,
 
   return ergo;
 }
-
-#define __G_PATTERN_C__
-#include "galiasdef.c"