Index: trunk/psModules/src/config/pmConfig.c
===================================================================
--- trunk/psModules/src/config/pmConfig.c	(revision 27057)
+++ trunk/psModules/src/config/pmConfig.c	(revision 27060)
@@ -42,4 +42,7 @@
 #define DEFAULT_LOG STDERR_FILENO       // Default file descriptor for log messages
 #define DEFAULT_TRACE STDERR_FILENO     // Default file descriptor for trace messages
+
+#define CHECK_FILE_RETRY 5              // Number of retries when checking a file
+#define CHECK_FILE_WAIT 250000          // Wait between retries (usec) when checking a file
 
 static bool readCameraConfig = true;    // Read the camera config on startup (with pmConfigRead)?
@@ -552,9 +555,10 @@
             psString resolved = pmConfigConvertFilename(logDest, config, true, false); // Resolved filename
             if (!resolved || strlen(resolved) == 0) {
-                psWarning("Unable to resolve log destination: %s --- ignored", logDest);
-            } else {
-                pmConfigRunFilenameAddWrite(config, "LOG", logDest);
-                config->logFD = psMessageDestination(resolved);
-            }
+                psError(psErrorCodeLast(), false, "Unable to resolve log destination: %s", logDest);
+                psFree(logDest);
+                return NULL;
+            }
+            pmConfigRunFilenameAddWrite(config, "LOG", logDest);
+            config->logFD = psMessageDestination(resolved);
             psFree(resolved);
             psFree(logDest);
@@ -611,9 +615,10 @@
             psString resolved = pmConfigConvertFilename(traceDest, config, true, false); // Resolved filename
             if (!resolved || strlen(resolved) == 0) {
-                psWarning("Unable to resolve trace destination: %s --- ignored", traceDest);
-            } else {
-                pmConfigRunFilenameAddWrite(config, "TRACE", traceDest);
-                config->traceFD = psMessageDestination(resolved);
-            }
+                psError(psErrorCodeLast(), false, "Unable to resolve trace destination: %s", traceDest);
+                psFree(traceDest);
+                return NULL;
+            }
+            pmConfigRunFilenameAddWrite(config, "TRACE", traceDest);
+            config->traceFD = psMessageDestination(resolved);
             psFree(resolved);
             psFree(traceDest);
@@ -1591,6 +1596,7 @@
 
         char *point = newName + strlen("file:");
-        while (*point == '/')
+        while (*point == '/') {
             point ++;
+        }
         char *tmpName = NULL;
         psStringAppend (&tmpName, "/%s", point);
@@ -1600,5 +1606,5 @@
         if (!checkPath(newName, create, trunc)) {
             // let checkPath()'s psError() call float up
-            psError(PS_ERR_UNKNOWN, false, "error from checkPath for file:// (%s)", newName);
+            psError(psErrorCodeLast(), false, "error from checkPath for file:// (%s)", newName);
             psFree (newName);
             return NULL;
@@ -1712,10 +1718,9 @@
         nebServerFree(server);
 
-        if (trunc) {
-            if(truncate(path, 0) != 0) {
-                psError(PS_ERR_IO, true, "Failed to truncate Nebulous file %s (real name %s)\n",
-                        filename, path);
-                return NULL;
-            }
+        // Check to ensure it's there.  Never create, because Nebulous has done that for us.
+        if (!checkPath(path, false, trunc)) {
+            psError(psErrorCodeLast(), false, "Cannot find file %s", path);
+            psFree(path);
+            return NULL;
         }
 
@@ -1802,5 +1807,5 @@
 
     // re-try access up to 5 times (1.25sec) to reduce NFS lurches
-    for (int i = 0; i < 5; i++) {
+    for (int i = 0; i < CHECK_FILE_RETRY; i++) {
         if (access(filename, R_OK) == 0) {
             // file already exists
@@ -1827,5 +1832,5 @@
             return true;
         }
-        usleep (250000);
+        usleep(CHECK_FILE_WAIT);
     }
 
