Don't assert on broken DM names.
[mono.git] / mono / mini / wapihandles.c
index 93da57bcc3cdb7e92db14f8e2439ad313eef456b..c873a1d243b809827baab1f627e26a243e0814bd 100644 (file)
@@ -1,7 +1,9 @@
 #include <config.h>
 #include <glib.h>
 
-#ifdef PLATFORM_WIN32
+#include "mini.h"
+
+#if defined(HOST_WIN32) || !defined(HAVE_SYS_IPC_H) || !defined(HAVE_SYS_SEM_H)
 
 int mini_wapi_hps (int argc, char **argv)
 {
@@ -32,23 +34,25 @@ int mini_wapi_seminfo (int argc, char **argv)
 #include <mono/io-layer/shared.h>
 #include <mono/io-layer/collection.h>
 
-static const guchar *unused_details (struct _WapiHandleShared *handle);
-static const guchar *unshared_details (struct _WapiHandleShared *handle);
-static const guchar *thread_details (struct _WapiHandleShared *handle);
-static const guchar *namedmutex_details (struct _WapiHandleShared *handle);
-static const guchar *namedsem_details (struct _WapiHandleShared *handle);
-static const guchar *namedevent_details (struct _WapiHandleShared *handle);
-static const guchar *process_details (struct _WapiHandleShared *handle);
+static const gchar *unused_details (struct _WapiHandleShared *handle);
+static const gchar *unshared_details (struct _WapiHandleShared *handle);
+#if 0
+static const gchar *thread_details (struct _WapiHandleShared *handle);
+#endif
+static const gchar *namedmutex_details (struct _WapiHandleShared *handle);
+static const gchar *namedsem_details (struct _WapiHandleShared *handle);
+static const gchar *namedevent_details (struct _WapiHandleShared *handle);
+static const gchar *process_details (struct _WapiHandleShared *handle);
 
 /* This depends on the ordering of the enum WapiHandleType in
  * io-layer/wapi-private.h
  */
-static const guchar * (*details[])(struct _WapiHandleShared *)=
+static const gchar * (*details[])(struct _WapiHandleShared *)=
 {
        unused_details,
        unshared_details,               /* file */
        unshared_details,               /* console */
-       thread_details,
+       unshared_details,               /* thread */
        unshared_details,               /* sem */
        unshared_details,               /* mutex */
        unshared_details,               /* event */
@@ -111,26 +115,27 @@ int mini_wapi_hps (int argc, char **argv)
                
                file_share = &_wapi_fileshare_layout->share_info[i];
                if (file_share->handle_refs > 0) {
-                       g_print ("dev: 0x%llx ino: %lld open pid: %d share: 0x%x access: 0x%x refs: %d\n", file_share->device, file_share->inode, file_share->opened_by_pid, file_share->sharemode, file_share->access, file_share->handle_refs);
+                       g_print ("dev: 0x%llx ino: %lld open pid: %d share: 0x%x access: 0x%x refs: %d\n", (long long int)file_share->device, (long long int)file_share->inode, file_share->opened_by_pid, file_share->sharemode, file_share->access, file_share->handle_refs);
                }
        }
        
        exit (0);
 }
 
-static const guchar *unused_details (struct _WapiHandleShared *handle)
+static const gchar *unused_details (struct _WapiHandleShared *handle)
 {
        return("unused details");
 }
 
-static const guchar *unshared_details (struct _WapiHandleShared *handle)
+static const gchar *unshared_details (struct _WapiHandleShared *handle)
 {
        return("unshared details");
 }
 
-static const guchar *thread_details (struct _WapiHandleShared *handle)
+#if 0
+static const gchar *thread_details (struct _WapiHandleShared *handle)
 {
-       static guchar buf[80];
+       static gchar buf[80];
        struct _WapiHandle_thread *thr=&handle->u.thread;
 
        g_snprintf (buf, sizeof(buf),
@@ -140,10 +145,11 @@ static const guchar *thread_details (struct _WapiHandleShared *handle)
        
        return(buf);
 }
+#endif
 
-static const guchar *namedmutex_details (struct _WapiHandleShared *handle)
+static const gchar *namedmutex_details (struct _WapiHandleShared *handle)
 {
-       static guchar buf[80];
+       static gchar buf[80];
        gchar *name;
        struct _WapiHandle_namedmutex *mut=&handle->u.namedmutex;
        
@@ -156,9 +162,9 @@ static const guchar *namedmutex_details (struct _WapiHandleShared *handle)
        return(buf);
 }
 
-static const guchar *namedsem_details (struct _WapiHandleShared *handle)
+static const gchar *namedsem_details (struct _WapiHandleShared *handle)
 {
-       static guchar buf[80];
+       static gchar buf[80];
        gchar *name;
        struct _WapiHandle_namedsem *sem = &handle->u.namedsem;
        
@@ -170,9 +176,9 @@ static const guchar *namedsem_details (struct _WapiHandleShared *handle)
        return(buf);
 }
 
-static const guchar *namedevent_details (struct _WapiHandleShared *handle)
+static const gchar *namedevent_details (struct _WapiHandleShared *handle)
 {
-       static guchar buf[80];
+       static gchar buf[80];
        gchar *name;
        struct _WapiHandle_namedevent *event = &handle->u.namedevent;
        
@@ -185,9 +191,9 @@ static const guchar *namedevent_details (struct _WapiHandleShared *handle)
        return(buf);
 }
 
-static const guchar *process_details (struct _WapiHandleShared *handle)
+static const gchar *process_details (struct _WapiHandleShared *handle)
 {
-       static guchar buf[80];
+       static gchar buf[80];
        gchar *name;
        struct _WapiHandle_process *proc=&handle->u.process;
        
@@ -222,13 +228,17 @@ int mini_wapi_semdel (int argc, char **argv)
        exit (0);
 }
 
-static void sem_explain (int val)
+static void sem_explain (int sem_id, ushort *vals, int which)
 {
-       g_print ("%d ", val);
-       if (val >= 1) {
+       pid_t pid;
+       
+       g_print ("%d ", vals[which]);
+       if (vals[which] >= 1) {
                g_print ("(Unlocked)");
        } else {
-               g_print ("(Locked)");
+               pid = semctl (sem_id, which, GETPID);
+               
+               g_print ("(Locked by %d)", pid);
        }
        g_print ("\n");
 }
@@ -258,14 +268,17 @@ int mini_wapi_seminfo (int argc, char **argv)
                ret = semctl (sem_id, 0, GETALL, arg);
                if (ret != -1) {
                        g_print ("Namespace: ");
-                       sem_explain (vals[_WAPI_SHARED_SEM_NAMESPACE]);
+                       sem_explain (sem_id, vals, _WAPI_SHARED_SEM_NAMESPACE);
                        g_print ("Fileshare: ");
-                       sem_explain (vals[_WAPI_SHARED_SEM_FILESHARE]);
+                       sem_explain (sem_id, vals, _WAPI_SHARED_SEM_FILESHARE);
                        g_print ("Handles: ");
-                       sem_explain (vals[_WAPI_SHARED_SEM_SHARED_HANDLES]);
+                       sem_explain (sem_id, vals,
+                                    _WAPI_SHARED_SEM_SHARED_HANDLES);
                        g_print ("Count lock: ");
-                       sem_explain (vals[_WAPI_SHARED_SEM_PROCESS_COUNT_LOCK]);
-                       g_print ("Count: %d\n", vals[_WAPI_SHARED_SEM_PROCESS_COUNT] - 1);
+                       sem_explain (sem_id, vals,
+                                    _WAPI_SHARED_SEM_PROCESS_COUNT_LOCK);
+                       g_print ("Count: %d\n",
+                                vals[_WAPI_SHARED_SEM_PROCESS_COUNT]);
                }
        }