Index: trunk/Nebulous/nebclient/src/nebclient.c
===================================================================
--- trunk/Nebulous/nebclient/src/nebclient.c	(revision 4639)
+++ trunk/Nebulous/nebclient/src/nebclient.c	(revision 4646)
@@ -4,5 +4,5 @@
  * Copyright (C) 2005  Joshua Hoblitt
  *
- * $Id: nebclient.c,v 1.29 2005-07-28 04:13:32 jhoblitt Exp $
+ * $Id: nebclient.c,v 1.30 2005-07-28 21:55:52 jhoblitt Exp $
  */
 
@@ -37,4 +37,5 @@
 static size_t nebParseURI(nebServer *server, const char *URI, char **filename);
 static bool nebNukeFile(nebServer *server, const char *filename);
+static char *nullstrncpy(char *dest, const char *src, size_t n);
 
 nebServer *nebServerAlloc(const char *endpoint)
@@ -457,8 +458,38 @@
 }
 
-int nebStat(nebServer *server, const char *key)
-{
-
-    return 0;
+nebObjectStat *nebStat(nebServer *server, const char *key)
+{
+    struct ns1__stat_USCOREobjectResponse response;
+    nebObjectStat   *stat;
+    int             resultElements = 0;
+    char            **resultArray = NULL;
+
+    stat = xmalloc(sizeof(nebObjectStat));
+
+    // FIXME is this leaking memory when response goes out of scope?
+    if (soap_call_ns1__stat_USCOREobject(server->soap, server->endpoint,
+            NULL, (char *)key, &response) != SOAP_OK) {
+        nebSetServerErr(server);
+        return NULL;
+    }
+
+    resultElements = response.result->__size;
+    resultArray    = response.result->__ptr;
+
+    if (resultElements != 8) {
+        nebSetErr(server, "server didn't return the proper number of stat elements");
+        return NULL;
+    }
+
+    nullstrncpy(stat->so_id, resultArray[0], 256);
+    nullstrncpy(stat->ext_id, resultArray[1], 256);
+    nullstrncpy(stat->class_id, resultArray[2], 256);
+    nullstrncpy(stat->comment, resultArray[3], 256);
+    nullstrncpy(stat->read_lock, resultArray[4], 256);
+    nullstrncpy(stat->write_lock, resultArray[5], 256);
+    nullstrncpy(stat->epoch, resultArray[6], 256);
+    nullstrncpy(stat->mtime, resultArray[7], 256);
+
+    return stat;
 }
 
@@ -681,2 +712,11 @@
     return true;
 }
+
+static char *nullstrncpy(char *dest, const char *src, size_t n) {
+    if (!src) {
+        dest = NULL;
+        return dest;
+    }
+
+    return strncpy(dest, src, n);
+}
