Index: /trunk/Nebulous/nebclient/src/nebclient.c
===================================================================
--- /trunk/Nebulous/nebclient/src/nebclient.c	(revision 4464)
+++ /trunk/Nebulous/nebclient/src/nebclient.c	(revision 4465)
@@ -4,5 +4,5 @@
  * Copyright (C) 2005  Joshua Hoblitt
  *
- * $Id: nebclient.c,v 1.6 2005-07-06 04:14:41 jhoblitt Exp $
+ * $Id: nebclient.c,v 1.7 2005-07-06 21:41:03 jhoblitt Exp $
  */
 
@@ -85,5 +85,5 @@
 }
 
-int nebReplicate(nebServer *server, char *key, char *volume, char **URI )
+bool nebReplicate(nebServer *server, const char *key, const char *volume, char **URI)
 {
     struct ns1__replicate_USCOREobjectResponse response;
@@ -91,45 +91,57 @@
     int             sourceFH, destFH;
 
-    if (soap_call_ns1__replicate_USCOREobject(server, NULL, NULL, key, volume, (char **)&response) == SOAP_OK) {
+    if (soap_call_ns1__replicate_USCOREobject(server, NULL, NULL, (char *)key, (char *)volume, (char **)&response) != SOAP_OK) {
+        // server error
+        return false;
+    }
+
+    if (!nebParseURI((char *)response.result, &filename)) {
+        fprintf(stderr, "can not parse URI\n");
+
+        return false;
+    }
+
+    // if URI is not NULL
+    if (URI) {
         *URI = xmalloc(strlen((char *)response.result));
         strcpy(*URI, (char *)response.result);
-
-        if (!nebParseURI(*URI, &filename)) {
-            fprintf(stderr, "can not parse URI\n");
-
-            return 0;
-        }
-
-        sourceFH = nebOpen(server, key, NEB_READ);
-        if (sourceFH == -1) {
-            fprintf(stderr, "can not open key %s\n", key );
-
-            return -1;
-        }
-
-        destFH = open(filename, O_RDWR|O_TRUNC, 0660);
-        if (destFH == -1) {
-            fprintf(stderr, "can not open %s: %s\n", filename, strerror(errno));
-
-            return -1;
-        }
-
-        nebCopyFilehandle(sourceFH, destFH);
-
-        if (close(sourceFH) == -1) {
-            fprintf(stderr, "can not close file: %s", strerror(errno));
-
-            return -1;
-        }
-
-        if (close(destFH) == -1) {
-            fprintf(stderr, "can not close %s: %s", filename, strerror(errno));
-
-            return -1;
-        }
-    }
-
-    // server error
-    return -1;
+    }
+
+    // need a read lock
+    sourceFH = nebOpen(server, (char *)key, NEB_READ);
+    if (sourceFH == -1) {
+        fprintf(stderr, "can not open key %s\n", key );
+        nebFree(filename);
+
+        return false;
+    }
+
+    destFH = open(filename, O_RDWR|O_TRUNC, 0660);
+    if (destFH == -1) {
+        fprintf(stderr, "can not open %s: %s\n", filename, strerror(errno));
+        nebFree(filename);
+
+        return false;
+    }
+
+    nebCopyFilehandle(sourceFH, destFH);
+
+    if (close(sourceFH) == -1) {
+        fprintf(stderr, "can not close file: %s", strerror(errno));
+        nebFree(filename);
+
+        return false;
+    }
+
+    if (close(destFH) == -1) {
+        fprintf(stderr, "can not close %s: %s", filename, strerror(errno));
+        nebFree(filename);
+
+        return false;
+    }
+
+    nebFree(filename);
+
+    return true;
 }
 
Index: /trunk/Nebulous/nebclient/src/nebclient.h
===================================================================
--- /trunk/Nebulous/nebclient/src/nebclient.h	(revision 4464)
+++ /trunk/Nebulous/nebclient/src/nebclient.h	(revision 4465)
@@ -4,5 +4,5 @@
  * Copyright (C) 2005  Joshua Hoblitt
  *
- * $Id: nebclient.h,v 1.8 2005-07-06 04:12:50 jhoblitt Exp $
+ * $Id: nebclient.h,v 1.9 2005-07-06 21:41:03 jhoblitt Exp $
  */
 
@@ -24,5 +24,5 @@
 int nebCreate(nebServer *server, char *key, unsigned int class, char *volume, char *comment, char **URI);
 
-int nebReplicate(nebServer *server, char *key, char *volume, char **URI);
+bool nebReplicate(nebServer *server, const char *key, const char *volume, char **URI);
 
 int nebCull(nebServer *server, char *key);
