net: Display a more specific error message when a service command fails.
authorRob Shearman <rob@codeweavers.com>
Tue, 1 Apr 2008 11:49:29 +0000 (12:49 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 2 Apr 2008 09:23:01 +0000 (11:23 +0200)
Use FormatMessage to get the message for the Win32 error.

programs/net/net.c

index f27c85310111c2a49d87dbd8dbf23c7b28100639..30337a69568254dc054ac2d66bc24ff9670cbf7e 100644 (file)
@@ -37,6 +37,20 @@ int output_string(int msg, ...)
     return 0;
 }
 
+BOOL output_error_string(DWORD error)
+{
+    LPSTR pBuffer;
+    if (FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM |
+            FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER,
+            NULL, error, 0, (LPSTR)&pBuffer, 0, NULL))
+    {
+        fputs(pBuffer, stdout);
+        LocalFree(pBuffer);
+        return TRUE;
+    }
+    return FALSE;
+}
+
 static BOOL net_use(int argc, char *argv[])
 {
     USE_INFO_2 *buffer, *connection;
@@ -140,14 +154,22 @@ static BOOL net_service(int operation, char *service_name)
         result = StartService(serviceHandle, 0, NULL);
 
         if(result) output_string(STRING_START_SVC_SUCCESS, service_display_name);
-        else output_string(STRING_START_SVC_FAIL, service_display_name);
+        else
+        {
+            if (!output_error_string(GetLastError()))
+                output_string(STRING_START_SVC_FAIL, service_display_name);
+        }
         break;
     case NET_STOP:
         output_string(STRING_STOP_SVC, service_display_name);
         result = StopService(SCManager, serviceHandle);
 
         if(result) output_string(STRING_STOP_SVC_SUCCESS, service_display_name);
-        else output_string(STRING_STOP_SVC_FAIL, service_display_name);
+        else
+        {
+            if (!output_error_string(GetLastError()))
+                output_string(STRING_STOP_SVC_FAIL, service_display_name);
+        }
         break;
     }