#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) || (defined(__native_client__) && defined(__GLIBC__))
int mini_wapi_hps (int argc, char **argv)
{
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);
unused_details,
unshared_details, /* file */
unshared_details, /* console */
- thread_details,
+ unshared_details, /* thread */
unshared_details, /* sem */
unshared_details, /* mutex */
unshared_details, /* event */
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);
}
}
return("unshared details");
}
+#if 0
static const gchar *thread_details (struct _WapiHandleShared *handle)
{
static gchar buf[80];
return(buf);
}
+#endif
static const gchar *namedmutex_details (struct _WapiHandleShared *handle)
{
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");
}
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]);
}
}