Index: trunk/ippTools/src/chiptool.c
===================================================================
--- trunk/ippTools/src/chiptool.c	(revision 8045)
+++ trunk/ippTools/src/chiptool.c	(revision 8050)
@@ -12,4 +12,5 @@
 static bool pendingMode(pxConfig *config);
 static bool doneMode(pxConfig *config);
+static p2DoneImfileRow *p2pendingToDoneImfile(pxConfig *config, p2PendingImfileRow *imfile);
 
 # define MODECASE(caseName, func) \
@@ -171,12 +172,22 @@
         return false;
     }
+
     // insert into done
-    psArray *doneImfiles = p2pendingToDoneImfile(pendingImfiles);
-    for (int i = 0; i < doneImfiles->n; i++) {
-        if (!p2DoneImfileInsertObject(config->dbh, doneImfiles->data[i])) {
+    for (long i = 0; i < psArrayLength(pendingImfiles); i++) {
+        p2DoneImfileRow *imfile = p2pendingToDoneImfile(config, pendingImfiles->data[0]);
+        if (!imfile) {
+            psError(PS_ERR_UNKNOWN, false, "failed to convert p2PendingImfile to p2DoneImfile");
+            psFree(pendingImfiles);
+            return false;
+        }
+        if (!p2DoneImfileInsertObject(config->dbh, imfile)) {
             psError(PS_ERR_UNKNOWN, false, "dbh access failed");
+            psFree(imfile);
+            psFree(pendingImfiles);
             return false;
         }
-    }
+        psFree(imfile);
+    }
+
     // delete from pending
     if (p2PendingImfileDeleteRowObjects(config->dbh, pendingImfiles, MAX_ROWS) < 0) {
@@ -244,27 +255,28 @@
 
 // XXX the filename layout is defined by this code
-psArray *p2pendingToDoneImfile(psArray *pendingImfiles)
-{
-    PS_ASSERT_PTR_NON_NULL(pendingImfiles, NULL);
-
-    psArray *doneImfiles = psArrayAlloc(pendingImfiles->n);
-    doneImfiles->n = 0;
-
-    for (int i = 0; i < pendingImfiles->n; i++) {
-        p2PendingImfileRow *pendingImfile = pendingImfiles->data[i];
-
-        p2DoneImfileRow *doneImfile = p2DoneImfileRowAlloc(
-            pendingImfile->exp_id,
-            pendingImfile->class_id,
-            pendingImfile->uri,
-            "my recipe", // recipe
-            "my stats", // stats
-            pendingImfile->p1_version,
-            pendingImfile->p2_version
-        );
-
-        psArrayAdd(doneImfiles, 100, doneImfile);
-    }
-
-    return doneImfiles;
-}
+static p2DoneImfileRow *p2pendingToDoneImfile(pxConfig *config, p2PendingImfileRow *imfile)
+{
+    PS_ASSERT_PTR_NON_NULL(config, NULL);
+    PS_ASSERT_PTR_NON_NULL(imfile, NULL);
+
+    bool status = false;
+    psString uri = psMetadataLookupStr(&status, config->args, "-uri");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -uri");
+        return NULL;
+    }
+    if (!uri) {
+        psError(PS_ERR_UNKNOWN, true, "-uri is required");
+        return NULL;
+    }
+
+    return p2DoneImfileRowAlloc(
+        imfile->exp_id,
+        imfile->class_id,
+        uri,
+        "my recipe", // recipe
+        "my stats", // stats
+        imfile->p1_version,
+        imfile->p2_version
+    );
+}
