]> git.draconx.ca Git - upkg.git/commitdiff
libupkg: Make upkg_export_find less useless.
authorNick Bowler <nbowler@draconx.ca>
Tue, 13 Jul 2010 23:14:27 +0000 (19:14 -0400)
committerNick Bowler <nbowler@draconx.ca>
Thu, 3 Mar 2011 01:28:43 +0000 (20:28 -0500)
Add a 'parent' parameter which should allow objects to be uniquely
specified.

src/libupkg.c
src/upkg.h

index 6b1cfb3f933c8e688c6cd61081b93252a2cc7239..b87c5dde8ef0a4c444bcf8bd1c50090007811ce8 100644 (file)
@@ -494,13 +494,17 @@ const char *upkg_get_name(struct upkg *pkg, unsigned long idx)
        return pkg->priv->names[idx].name;
 }
 
-long upkg_export_find(struct upkg *pkg, const char *name)
+long upkg_export_find(struct upkg *pkg, long parent, const char *name)
 {
-       /* This is wrong.
-        * Export names are not necessarily unique within a package. */
-       for (unsigned i = 0; i < pkg->export_count; i++) {
-               struct upkg_export *export = &pkg->priv->exports[i];
-               if (strcmp(export->name, name) == 0) {
+       /* This only makes sense if the assertion below is not violated. */
+       long package = parent < 0 ? 0 : parent + 1;
+
+       for (unsigned long i = 0; i < pkg->export_count; i++) {
+               struct upkg_export *e = &pkg->priv->exports[i];
+
+               /* Assertion: an object's package is an export. */
+               format_assert(e->package >= 0, continue);
+               if (e->package == package && strcmp(e->name, name) == 0) {
                        return i;
                }
        }
index c5da628b1660df074ad6cef64dd6d2234cef799f..57477a579b34c87d0535866dcbd06ac20fec68b4 100644 (file)
@@ -98,7 +98,7 @@ int upkg_close(struct upkg *pkg);
 
 const char *upkg_get_name(struct upkg *pkg, unsigned long idx);
 
-long   upkg_export_find(struct upkg *pkg, const char *name);
+long upkg_export_find(struct upkg *pkg, long parent, const char *name);
 
 unsigned long upkg_export_flags(struct upkg *pkg, unsigned long idx);
 const char *upkg_export_name(struct upkg *pkg, unsigned long idx);