Added ndn_Name_match.
diff --git a/ndn-cpp/c/name.c b/ndn-cpp/c/name.c
new file mode 100644
index 0000000..3f24a67
--- /dev/null
+++ b/ndn-cpp/c/name.c
@@ -0,0 +1,27 @@
+/**
+ * @author: Jeff Thompson
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "util/ndn_memory.h"
+#include "name.h"
+
+int ndn_Name_match(struct ndn_Name *self, struct ndn_Name *name)
+{
+	// This name is longer than the name we are checking it against.
+	if (self->nComponents > name->nComponents)
+    return 0;
+
+	// Check if at least one of given components doesn't match.
+  unsigned int i;
+  for (i = 0; i < self->nComponents; ++i) {
+    struct ndn_NameComponent *selfComponent = self->components + i;
+    struct ndn_NameComponent *nameComponent = name->components + i;
+
+    if (selfComponent->valueLength != nameComponent->valueLength ||
+        ndn_memcmp(selfComponent->value, nameComponent->value, selfComponent->valueLength) != 0)
+      return 0;
+  }
+
+	return 1;
+}
diff --git a/ndn-cpp/c/name.h b/ndn-cpp/c/name.h
index b7be236..8105d60 100644
--- a/ndn-cpp/c/name.h
+++ b/ndn-cpp/c/name.h
@@ -52,6 +52,14 @@
   self->nComponents = 0;
 }
 
+/**
+ * Return true if the N components of this name are the same as the first N components of the given name.
+ * @param self A pointer to the ndn_Name struct.
+ * @param name A pointer to the other name to match.
+ * @return 1 if this matches the given name, 0 otherwise.  This always returns 1 if this name is empty.
+ */
+int ndn_Name_match(struct ndn_Name *self, struct ndn_Name *name);
+
 #ifdef __cplusplus
 }
 #endif