Index: /trunk/Nebulous/nebclient/src/nebclient.c
===================================================================
--- /trunk/Nebulous/nebclient/src/nebclient.c	(revision 4503)
+++ /trunk/Nebulous/nebclient/src/nebclient.c	(revision 4504)
@@ -4,5 +4,5 @@
  * Copyright (C) 2005  Joshua Hoblitt
  *
- * $Id: nebclient.c,v 1.10 2005-07-07 02:08:12 jhoblitt Exp $
+ * $Id: nebclient.c,v 1.11 2005-07-07 21:41:15 jhoblitt Exp $
  */
 
@@ -22,5 +22,5 @@
 #include "nebclient.h"
 
-#define ERRBUF_SIZE 255
+#define ERRBUF_SIZE 2048
 
 static off_t nebCopyFile(char *source, char *dest);
@@ -29,7 +29,15 @@
 static bool nebNukeFile(const char *filename);
 
-void nebServerInit(nebServer *server)
-{
-    soap_init(server);
+nebServer *nebServerAlloc(void)
+{
+    nebServer       *server;
+
+    server          = xmalloc(sizeof(nebServer));
+    server->soap    = xmalloc(sizeof(struct soap));
+    server->err_msg = xmalloc(ERRBUF_SIZE);
+
+    soap_init(server->soap);
+
+    return server;
 }
 
@@ -40,6 +48,6 @@
     const char      **string;
 
-    code   = soap_faultcode(server);
-    string = soap_faultstring(server);
+    code   = soap_faultcode(server->soap);
+    string = soap_faultstring(server->soap);
 
     fault = xmalloc(strlen(*code) + 3 + strlen(*string) + 1);
@@ -51,6 +59,10 @@
 void nebServerCleanup(nebServer *server)
 {
-    soap_end(server); // remove deserialized data and clean up
-    soap_done(server); // detach the gSOAP environment
+    soap_end(server->soap); // remove deserialized data and clean up
+    soap_done(server->soap); // detach the gSOAP environment
+
+    nebFree(server->soap);
+    nebFree(server->err_msg);
+    nebFree(server);
 }
 
@@ -61,5 +73,5 @@
     int             file;
 
-    if (soap_call_ns1__create_USCOREobject(server, NULL, NULL, key, class, volume, comment, (char **)&response) == SOAP_OK) {
+    if (soap_call_ns1__create_USCOREobject(server->soap, NULL, NULL, key, class, volume, comment, (char **)&response) == SOAP_OK) {
         *URI = xmalloc(strlen((char *)response.result));
         strcpy(*URI, (char *)response.result);
@@ -91,5 +103,5 @@
     int             sourceFH, destFH;
 
-    if (soap_call_ns1__replicate_USCOREobject(server, NULL, NULL, (char *)key, (char *)volume, (char **)&response) != SOAP_OK) {
+    if (soap_call_ns1__replicate_USCOREobject(server->soap, NULL, NULL, (char *)key, (char *)volume, (char **)&response) != SOAP_OK) {
         // server error
         return false;
@@ -188,5 +200,5 @@
 
     // FIXME is this leaking memory when response goes out of scope?
-    if (soap_call_ns1__find_USCOREinstances(server, NULL, NULL, key, volume, &response) == SOAP_OK) {
+    if (soap_call_ns1__find_USCOREinstances(server->soap, NULL, NULL, key, volume, &response) == SOAP_OK) {
 
         resultElements = response.result->__size;
@@ -261,5 +273,4 @@
     if (n < 0) {
         fprintf(stderr, "no instances found\n");
-        nebFree(locations);
 
         return false;
@@ -305,5 +316,5 @@
     }
 
-    if (soap_call_ns1__delete_USCOREinstance(server, NULL, NULL, (char *)URI, &response) != SOAP_OK) {
+    if (soap_call_ns1__delete_USCOREinstance(server->soap, NULL, NULL, (char *)URI, &response) != SOAP_OK) {
         nebFree(filename);
 
Index: /trunk/Nebulous/nebclient/src/nebclient.h
===================================================================
--- /trunk/Nebulous/nebclient/src/nebclient.h	(revision 4503)
+++ /trunk/Nebulous/nebclient/src/nebclient.h	(revision 4504)
@@ -4,5 +4,5 @@
  * Copyright (C) 2005  Joshua Hoblitt
  *
- * $Id: nebclient.h,v 1.12 2005-07-07 02:08:12 jhoblitt Exp $
+ * $Id: nebclient.h,v 1.13 2005-07-07 21:41:15 jhoblitt Exp $
  */
 
@@ -14,7 +14,11 @@
 
 typedef enum { NEB_READ, NEB_WRITE } rw;
-typedef struct soap nebServer;
+typedef struct {
+    struct soap     *soap;
+    char            *err_msg;
+}nebServer;
 
-void nebServerInit(nebServer *server);
+//void nebServerInit(nebServer *server);
+nebServer *nebServerAlloc(void);
 
 char *nebServerErr(nebServer *server);
Index: /trunk/Nebulous/nebclient/src/test.c
===================================================================
--- /trunk/Nebulous/nebclient/src/test.c	(revision 4503)
+++ /trunk/Nebulous/nebclient/src/test.c	(revision 4504)
@@ -4,5 +4,5 @@
 
 int main (int argc, char **argv) {
-    nebServer     server;
+    nebServer       *server;
     char            *URI;
     int             fh;
@@ -10,7 +10,7 @@
     char            **foo;
 
-    nebServerInit(&server);
+    server = nebServerAlloc();
 
-    fh = nebCreate(&server, argv[1], 0, NULL, NULL, &URI);
+    fh = nebCreate(server, argv[1], 0, NULL, NULL, &URI);
 
     if (fh > 0) {
@@ -25,8 +25,8 @@
         printf( "local error\n" );
     } else {
-        printf( "server error: %s\n", nebServerErr(&server) );
+        printf( "server error: %s\n", nebServerErr(server) );
     }
 
-    if (!nebReplicate(&server, argv[1], NULL, NULL)) {
+    if (!nebReplicate(server, argv[1], NULL, NULL)) {
         printf( "replication failed\n" );
     } else {
@@ -34,5 +34,5 @@
     }
 
-    if (!nebCull(&server, argv[1])) {
+    if (!nebCull(server, argv[1])) {
         printf( "cull failed\n" );
     } else {
@@ -40,8 +40,8 @@
     }
 
-    n = nebFindInstances(&server, argv[1], NULL, &foo);
+    n = nebFindInstances(server, argv[1], NULL, &foo);
     printf( "found %d instances\n", n );
 
-    if (!nebDelete(&server, argv[1])) {
+    if (!nebDelete(server, argv[1])) {
         printf( "delete failed\n" );
     } else {
@@ -49,8 +49,8 @@
     }
 
-    n = nebFindInstances(&server, argv[1], NULL, &foo);
+    n = nebFindInstances(server, argv[1], NULL, &foo);
     printf( "found %d instances\n", n );
 
-    nebServerCleanup(&server);
+    nebServerCleanup(server);
 
     exit(0);
