diff options
| -rw-r--r-- | create.c | 49 | 
1 files changed, 49 insertions, 0 deletions
| @@ -7,6 +7,10 @@   */  #include "pthread.h" +#include "implement.h" + +/* FIXME: There must be a Win32 routine to get this value. */ +DWORD pthread_threads_count = 0;  int  pthread_create(pthread_t *thread, const pthread_attr_t *attr, @@ -15,4 +19,49 @@ pthread_create(pthread_t *thread, const pthread_attr_t *attr,    /* Call Win32 CreateThread.       Map attributes as correctly as possible.    */ +  HANDLE handle; + +  /* FIXME: I don't have doco on attributes so these aren't +     included yet. Threads will be started with Win32 defaults: +     unsuspended and with default stack size. +   */ +  DWORD  flags = 0; +  DWORD  stack = 0; +  LPSECURITY_ATTRIBUTES  security = NULL; + +  /* FIXME: This needs to be moved into process space.  +     Perhaps into a structure that contains all +     per thread info that is Win32 thread specific but +     not visible from the pthreads API, and +     accessible through HANDLE (or pthread_t). +   */ +  SECURITY_ATTRIBUTES security_attr; +  DWORD  threadID; + +  if (pthread_threads_count >= PTHREAD_THREADS_MAX) +    return EAGAIN; + +  switch (attr) +    { +    case NULL: +      /* Use POSIX default attributes */ +      break; +    default: +      /* Map attributes */ +      break; +    } + +  /* FIXME: I don't have error return values to work with so +     I'm assuming this always succeeds (obviously not). +   */ +  handle = CreateThread(security, +			stack, +			start_routine, +			arg, +			flags, +			&threadID); + +  *thread = (pthread_t) handle; +  pthread_threads_count++; +  return 0;  } | 
