* Makefile.in: Put -lgcc last in list of libraries, since stdc++ library needs
it. * cygwin.din: Remove obsolete "__empty" export. * exceptions.cc (call_signal_handler_now): Force inclusion of function even when -finline-functions is specified. * sigproc.h: Remove obsolete call_signal_handler declaration. * fhandler_console.cc (cp_get_internal): New function. (cp_convert): New function. (con_to_str): New function. (str_to_con): New function. (fhandler_console::read): Replace OemToCharBuff with con_to_str. (fhandler_console::write_normal): Replace CharToOemBuff with str_to_con.
This commit is contained in:
		| @@ -1,3 +1,21 @@ | ||||
| Sun Apr  8 20:40:58 2001  Christopher Faylor <cgf@cygnus.com> | ||||
|  | ||||
| 	* Makefile.in: Put -lgcc last in list of libraries, since stdc++ | ||||
| 	library needs it. | ||||
| 	* cygwin.din: Remove obsolete "__empty" export. | ||||
| 	* exceptions.cc (call_signal_handler_now): Force inclusion of function | ||||
| 	even when -finline-functions is specified. | ||||
| 	* sigproc.h: Remove obsolete call_signal_handler declaration. | ||||
|  | ||||
| Sun Apr  8 20:36:55 2001  Benjamin Riefenstahl  <Benjamin.Riefenstahl@epost.de> | ||||
|   | ||||
| 	* fhandler_console.cc (cp_get_internal): New function. | ||||
| 	(cp_convert): New function. | ||||
| 	(con_to_str): New function. | ||||
| 	(str_to_con): New function. | ||||
| 	(fhandler_console::read): Replace OemToCharBuff with con_to_str. | ||||
| 	(fhandler_console::write_normal): Replace CharToOemBuff with str_to_con. | ||||
|  | ||||
| Thu Apr  5 22:41:00 2001  Corinna Vinschen <corinna@vinschen.de> | ||||
|  | ||||
| 	* syscalls.cc (stat_worker): Fix conditional which still allowed | ||||
|   | ||||
| @@ -190,7 +190,7 @@ new-$(LIB_NAME): $(LIB_NAME) | ||||
|  | ||||
| new-$(DLL_NAME): $(DLL_OFILES) $(DEF_FILE) $(DLL_IMPORTS) $(LIBC) $(LIBM) Makefile winver_stamp | ||||
| 	$(CXX) $(CXXFLAGS) -nostdlib -Wl,-shared -o $@ -e $(DLL_ENTRY) $(DEF_FILE) $(DLL_OFILES) version.o \ | ||||
| 	winver.o $(DLL_IMPORTS) $(MALLOC_OBJ) $(LIBM) $(LIBC) -lgcc -lstdc++ -lshell32 -luuid | ||||
| 	winver.o $(DLL_IMPORTS) $(MALLOC_OBJ) $(LIBM) $(LIBC) -lstdc++ -lshell32 -luuid -lgcc | ||||
|  | ||||
| dll_ofiles: $(DLL_OFILES) | ||||
|  | ||||
|   | ||||
| @@ -938,7 +938,6 @@ getpgrp | ||||
| _getpgrp = getpgrp | ||||
| getgrent | ||||
| _getgrent = getgrent | ||||
| __empty | ||||
| ntohl | ||||
| _ntohl = ntohl | ||||
| htonl | ||||
|   | ||||
| @@ -1128,6 +1128,10 @@ call_signal_handler_now () | ||||
|   sigdelayed0 (); | ||||
|   return sa_flags & SA_RESTART; | ||||
| } | ||||
| /* This kludge seems to keep a copy of call_signal_handler_now around | ||||
|    even when compiling with -finline-functions. */ | ||||
| static int __stdcall call_signal_handler_now_dummy () | ||||
|   __attribute__((alias ("call_signal_handler_now"))); | ||||
| }; | ||||
|  | ||||
| int | ||||
|   | ||||
| @@ -18,6 +18,7 @@ details. */ | ||||
| #include <wingdi.h> | ||||
| #include <winuser.h> | ||||
| #include <wincon.h> | ||||
| #include <winnls.h>	// MultiByteToWideChar () and friends | ||||
| #include <ctype.h> | ||||
| #include <sys/cygwin.h> | ||||
| #include "cygheap.h" | ||||
| @@ -29,6 +30,53 @@ details. */ | ||||
| #include "shared_info.h" | ||||
| #include "security.h" | ||||
|  | ||||
| #define CONVERT_LIMIT 4096 | ||||
|  | ||||
| /* The codepages are resolved here instead of using CP_ACP and | ||||
|    CP_OEMCP, so that they can later be compared for equality. */ | ||||
| inline UINT | ||||
| cp_get_internal () | ||||
| { | ||||
|   return current_codepage == ansi_cp ? GetACP() : GetOEMCP(); | ||||
| } | ||||
|  | ||||
| static BOOL | ||||
| cp_convert (UINT destcp, char * dest, UINT srccp, const char * src, DWORD size) | ||||
| { | ||||
|   if (!size) | ||||
|     /* no action */; | ||||
|   else if (destcp == srccp) | ||||
|     { | ||||
|       if (dest != src) | ||||
| 	memcpy (dest, src, size); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       WCHAR wbuffer[CONVERT_LIMIT]; /* same size as the maximum input, s.b. */ | ||||
|       if (!MultiByteToWideChar (srccp, 0, src, size, wbuffer, sizeof (wbuffer))) | ||||
| 	return FALSE; | ||||
|       if (!WideCharToMultiByte (destcp, 0, wbuffer, size, dest, size, | ||||
| 				NULL, NULL)) | ||||
| 	return FALSE; | ||||
|     } | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| /* The results of GetConsoleCP() and GetConsoleOutputCP() cannot be | ||||
|    cached, because a program or the user can change these values at | ||||
|    any time. */ | ||||
| inline BOOL | ||||
| con_to_str (char *d, const char *s, DWORD sz) | ||||
| { | ||||
|   return cp_convert (cp_get_internal (), d, GetConsoleCP (), s, sz); | ||||
| } | ||||
|  | ||||
| inline BOOL | ||||
| str_to_con (char *d, const char *s, DWORD sz) | ||||
| { | ||||
|   return cp_convert (GetConsoleOutputCP (), d, cp_get_internal (), s, sz); | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Scroll the screen context. | ||||
|  * x1, y1 - ul corner | ||||
| @@ -124,7 +172,7 @@ fhandler_console::set_cursor_maybe () | ||||
| { | ||||
|   CONSOLE_SCREEN_BUFFER_INFO now; | ||||
|  | ||||
|   if (!GetConsoleScreenBufferInfo (get_output_handle(), &now)) | ||||
|   if (!GetConsoleScreenBufferInfo (get_output_handle (), &now)) | ||||
|     return; | ||||
|  | ||||
|   if (dwLastCursorPosition.X != now.dwCursorPosition.X || | ||||
| @@ -216,13 +264,13 @@ fhandler_console::read (void *pv, size_t buflen) | ||||
|  | ||||
| 	  if (raw_win32_keyboard_mode) | ||||
| 	    { | ||||
| 	      __small_sprintf(tmp, "\033{%u;%u;%u;%u;%u;%luK", | ||||
| 				   input_rec.Event.KeyEvent.bKeyDown, | ||||
| 				   input_rec.Event.KeyEvent.wRepeatCount, | ||||
| 				   input_rec.Event.KeyEvent.wVirtualKeyCode, | ||||
| 				   input_rec.Event.KeyEvent.wVirtualScanCode, | ||||
| 				   input_rec.Event.KeyEvent.uChar.UnicodeChar, | ||||
| 				   input_rec.Event.KeyEvent.dwControlKeyState); | ||||
| 	      __small_sprintf (tmp, "\033{%u;%u;%u;%u;%u;%luK", | ||||
| 				    input_rec.Event.KeyEvent.bKeyDown, | ||||
| 				    input_rec.Event.KeyEvent.wRepeatCount, | ||||
| 				    input_rec.Event.KeyEvent.wVirtualKeyCode, | ||||
| 				    input_rec.Event.KeyEvent.wVirtualScanCode, | ||||
| 				    input_rec.Event.KeyEvent.uChar.UnicodeChar, | ||||
| 				    input_rec.Event.KeyEvent.dwControlKeyState); | ||||
| 	      toadd = tmp; | ||||
| 	      nread = strlen (toadd); | ||||
| 	      break; | ||||
| @@ -248,8 +296,8 @@ fhandler_console::read (void *pv, size_t buflen) | ||||
| 	      tmp[1] = ich; | ||||
| 	      /* Need this check since US code page seems to have a bug when | ||||
| 		 converting a CTRL-U. */ | ||||
| 	      if ((unsigned char)ich > 0x7f && current_codepage == ansi_cp) | ||||
| 		OemToCharBuff (tmp + 1, tmp + 1, 1); | ||||
| 	      if ((unsigned char)ich > 0x7f) | ||||
| 		con_to_str (tmp + 1, tmp + 1, 1); | ||||
| 	      /* Determine if the keystroke is modified by META. */ | ||||
| 	      if (!(input_rec.Event.KeyEvent.dwControlKeyState & meta_mask)) | ||||
| 		toadd = tmp + 1; | ||||
| @@ -273,7 +321,7 @@ fhandler_console::read (void *pv, size_t buflen) | ||||
| 	      /* Treat the double-click event like a regular button press */ | ||||
| 	      if (mouse_event.dwEventFlags == DOUBLE_CLICK) | ||||
| 		{ | ||||
| 		  syscall_printf("mouse: double-click -> click"); | ||||
| 		  syscall_printf ("mouse: double-click -> click"); | ||||
| 		  mouse_event.dwEventFlags = 0; | ||||
| 		} | ||||
|  | ||||
| @@ -287,7 +335,7 @@ fhandler_console::read (void *pv, size_t buflen) | ||||
| 	      int y = mouse_event.dwMousePosition.Y; | ||||
| 	      if ((x + ' ' + 1 > 0xFF) || (y + ' ' + 1 > 0xFF)) | ||||
| 		{ | ||||
| 		  syscall_printf("mouse: position out of range"); | ||||
| 		  syscall_printf ("mouse: position out of range"); | ||||
| 		  continue; | ||||
| 		} | ||||
|  | ||||
| @@ -300,28 +348,28 @@ fhandler_console::read (void *pv, size_t buflen) | ||||
| 	      char sz[32]; | ||||
| 	      if (mouse_event.dwButtonState == dwLastButtonState) | ||||
| 		{ | ||||
| 		  syscall_printf("mouse: button state unchanged"); | ||||
| 		  syscall_printf ("mouse: button state unchanged"); | ||||
| 		  continue; | ||||
| 		} | ||||
| 	      else if (mouse_event.dwButtonState < dwLastButtonState) | ||||
| 		{ | ||||
| 		  b = 3; | ||||
| 		  strcpy(sz, "btn up"); | ||||
| 		  strcpy (sz, "btn up"); | ||||
| 		} | ||||
| 	      else if ((mouse_event.dwButtonState & 1) != (dwLastButtonState & 1)) | ||||
| 		{ | ||||
| 		  b = 0; | ||||
| 		  strcpy(sz, "btn1 down"); | ||||
| 		  strcpy (sz, "btn1 down"); | ||||
| 		} | ||||
| 	      else if ((mouse_event.dwButtonState & 2) != (dwLastButtonState & 2)) | ||||
| 		{ | ||||
| 		  b = 1; | ||||
| 		  strcpy(sz, "btn2 down"); | ||||
| 		  strcpy (sz, "btn2 down"); | ||||
| 		} | ||||
| 	      else if ((mouse_event.dwButtonState & 4) != (dwLastButtonState & 4)) | ||||
| 		{ | ||||
| 		  b = 2; | ||||
| 		  strcpy(sz, "btn3 down"); | ||||
| 		  strcpy (sz, "btn3 down"); | ||||
| 		} | ||||
|  | ||||
| 	      /* Remember the current button state */ | ||||
| @@ -342,8 +390,8 @@ fhandler_console::read (void *pv, size_t buflen) | ||||
| 	      b |= nModifiers; | ||||
|  | ||||
| 	      /* We can now create the code. */ | ||||
| 	      sprintf(tmp, "\033[M%c%c%c", b + ' ', x + ' ' + 1, y + ' ' + 1); | ||||
| 	      syscall_printf("mouse: %s at (%d,%d)", sz, x, y); | ||||
| 	      sprintf (tmp, "\033[M%c%c%c", b + ' ', x + ' ' + 1, y + ' ' + 1); | ||||
| 	      syscall_printf ("mouse: %s at (%d,%d)", sz, x, y); | ||||
|  | ||||
| 	      toadd = tmp; | ||||
| 	      nread = 6; | ||||
| @@ -399,7 +447,7 @@ fhandler_console::fillin_info (void) | ||||
|   BOOL ret; | ||||
|   CONSOLE_SCREEN_BUFFER_INFO linfo; | ||||
|  | ||||
|   if ((ret = GetConsoleScreenBufferInfo (get_output_handle(), &linfo))) | ||||
|   if ((ret = GetConsoleScreenBufferInfo (get_output_handle (), &linfo))) | ||||
|     { | ||||
|       info.winTop = linfo.srWindow.Top; | ||||
|       info.winBottom = linfo.srWindow.Bottom; | ||||
| @@ -513,7 +561,7 @@ fhandler_console::open (const char *, int flags, mode_t) | ||||
|  | ||||
|   TTYCLEARF (RSTCONS); | ||||
|   set_ctty (TTY_CONSOLE, flags); | ||||
|   debug_printf("opened conin$ %p, conout$ %p", | ||||
|   debug_printf ("opened conin$ %p, conout$ %p", | ||||
| 		get_io_handle (), get_output_handle ()); | ||||
|  | ||||
|   return 1; | ||||
| @@ -539,7 +587,7 @@ fhandler_console::dup (fhandler_base *child) | ||||
| { | ||||
|   fhandler_console *fhc = (fhandler_console *) child; | ||||
|  | ||||
|   if (!fhc->open(get_name (), get_flags (), 0)) | ||||
|   if (!fhc->open (get_name (), get_flags (), 0)) | ||||
|     system_printf ("error opening console, %E"); | ||||
|  | ||||
|   fhc->default_color = default_color; | ||||
| @@ -569,9 +617,9 @@ fhandler_console::dup (fhandler_base *child) | ||||
|   if (savebuf) | ||||
|     { | ||||
|       fhc->savebuf = (PCHAR_INFO) malloc (sizeof (CHAR_INFO) * | ||||
|       					  savebufsiz.X * savebufsiz.Y); | ||||
| 					  savebufsiz.X * savebufsiz.Y); | ||||
|       memcpy (fhc->savebuf, savebuf, sizeof (CHAR_INFO) * | ||||
|       				     savebufsiz.X * savebufsiz.Y); | ||||
| 				     savebufsiz.X * savebufsiz.Y); | ||||
|     } | ||||
|  | ||||
|   fhc->scroll_region = scroll_region; | ||||
| @@ -874,11 +922,11 @@ fhandler_console::clear_screen (int x1, int y1, int x2, int y2) | ||||
|   (void)fillin_info (); | ||||
|  | ||||
|   if (x1 < 0) | ||||
|     x1 = info.dwWinSize.X-1; | ||||
|     x1 = info.dwWinSize.X - 1; | ||||
|   if (y1 < 0) | ||||
|     y1 = info.winBottom; | ||||
|   if (x2 < 0) | ||||
|     x2 = info.dwWinSize.X-1; | ||||
|     x2 = info.dwWinSize.X - 1; | ||||
|   if (y2 < 0) | ||||
|     y2 = info.winBottom; | ||||
|  | ||||
| @@ -1097,12 +1145,12 @@ fhandler_console::char_command (char c) | ||||
|     case 'h': | ||||
|     case 'l': | ||||
|       if (!saw_question_mark) | ||||
|         { | ||||
| 	{ | ||||
| 	  switch (args_[0]) | ||||
| 	    { | ||||
| 	    case 4:    /* Insert mode */ | ||||
| 	      insert_mode = (c == 'h') ? TRUE : FALSE; | ||||
| 	      syscall_printf("insert mode %sabled", insert_mode ? "en" : "dis"); | ||||
| 	      syscall_printf ("insert mode %sabled", insert_mode ? "en" : "dis"); | ||||
| 	      break; | ||||
| 	    } | ||||
| 	  break; | ||||
| @@ -1116,15 +1164,15 @@ fhandler_console::char_command (char c) | ||||
| 	      COORD cob = { 0, 0 }; | ||||
|  | ||||
| 	      if (!GetConsoleScreenBufferInfo (get_output_handle (), &now)) | ||||
| 	        break; | ||||
| 		break; | ||||
|  | ||||
| 	      savebufsiz.X = now.srWindow.Right - now.srWindow.Left; | ||||
| 	      savebufsiz.Y = now.srWindow.Bottom - now.srWindow.Top; | ||||
|  | ||||
| 	      if (savebuf) | ||||
| 	        free (savebuf); | ||||
| 		free (savebuf); | ||||
| 	      savebuf = (PCHAR_INFO) malloc (sizeof (CHAR_INFO) * | ||||
| 	      				     savebufsiz.X * savebufsiz.Y); | ||||
| 					     savebufsiz.X * savebufsiz.Y); | ||||
|  | ||||
| 	      ReadConsoleOutputA (get_output_handle (), savebuf, | ||||
| 				  savebufsiz, cob, &now.srWindow); | ||||
| @@ -1135,13 +1183,13 @@ fhandler_console::char_command (char c) | ||||
| 	      COORD cob = { 0, 0 }; | ||||
|  | ||||
| 	      if (!GetConsoleScreenBufferInfo (get_output_handle (), &now)) | ||||
| 	        break; | ||||
| 		break; | ||||
|  | ||||
| 	      if (!savebuf) | ||||
| 	        break; | ||||
| 		break; | ||||
|  | ||||
| 	      WriteConsoleOutputA (get_output_handle (), savebuf, | ||||
| 	      			   savebufsiz, cob, &now.srWindow); | ||||
| 				   savebufsiz, cob, &now.srWindow); | ||||
|  | ||||
| 	      free (savebuf); | ||||
| 	      savebuf = NULL; | ||||
| @@ -1151,7 +1199,7 @@ fhandler_console::char_command (char c) | ||||
|  | ||||
| 	case 1000: /* Mouse support */ | ||||
| 	  use_mouse = (c == 'h') ? TRUE : FALSE; | ||||
| 	  syscall_printf("mouse support %sabled", use_mouse ? "en" : "dis"); | ||||
| 	  syscall_printf ("mouse support %sabled", use_mouse ? "en" : "dis"); | ||||
| 	  break; | ||||
|  | ||||
| 	case 2000: /* Raw keyboard mode */ | ||||
| @@ -1159,7 +1207,7 @@ fhandler_console::char_command (char c) | ||||
| 	  break; | ||||
|  | ||||
| 	default: /* Ignore */ | ||||
| 	  syscall_printf("unknown h/l command: %d", args_[0]); | ||||
| 	  syscall_printf ("unknown h/l command: %d", args_[0]); | ||||
| 	  break; | ||||
| 	} | ||||
|       break; | ||||
| @@ -1235,7 +1283,7 @@ fhandler_console::char_command (char c) | ||||
|       break; | ||||
|     case 'I':	/* TAB */ | ||||
|       cursor_get (&x, &y); | ||||
|       cursor_set (FALSE, 8*(x/8+1), y); | ||||
|       cursor_set (FALSE, 8 * (x / 8 + 1), y); | ||||
|       break; | ||||
|     case 'L':				/* AL - insert blank lines */ | ||||
|       args_[0] = args_[0] ? args_[0] : 1; | ||||
| @@ -1259,7 +1307,7 @@ fhandler_console::char_command (char c) | ||||
|       break; | ||||
|     case 'S':				/* SF - Scroll forward */ | ||||
|       args_[0] = args_[0] ? args_[0] : 1; | ||||
|       scroll_screen(0, args_[0], -1, -1, 0, 0); | ||||
|       scroll_screen (0, args_[0], -1, -1, 0, 0); | ||||
|       break; | ||||
|     case 'T':				/* SR - Scroll down */ | ||||
|       fillin_info (); | ||||
| @@ -1279,7 +1327,7 @@ fhandler_console::char_command (char c) | ||||
|     case 'b':				/* Repeat char #1 #2 times */ | ||||
|       if (insert_mode) | ||||
| 	{ | ||||
|           cursor_get (&x, &y); | ||||
| 	  cursor_get (&x, &y); | ||||
| 	  scroll_screen (x, y, -1, y, x + args_[1], y); | ||||
| 	} | ||||
|       while (args_[1]--) | ||||
| @@ -1330,33 +1378,42 @@ fhandler_console::write_normal (const unsigned char *src, | ||||
| 	break; | ||||
|       found++; | ||||
|     } | ||||
|  | ||||
|   /* Print all the base ones out */ | ||||
|   if (found != src) | ||||
|     { | ||||
|       char buf[4096]; | ||||
|       size_t len = found - src; | ||||
|       do { | ||||
| 	size_t l2 = min (sizeof (buf), len); | ||||
| 	if (current_codepage == ansi_cp) | ||||
| 	  CharToOemBuff ((LPCSTR)src, buf, l2); | ||||
| 	else | ||||
| 	  strncpy (buf, (LPCSTR)src, l2); | ||||
|         if (insert_mode) | ||||
| 	  { | ||||
| 	    int x, y; | ||||
|             cursor_get (&x, &y); | ||||
| 	    scroll_screen (x, y, -1, y, x + l2, y); | ||||
| 	  } | ||||
| 	if (!WriteFile (get_output_handle (), buf, l2, &done, 0)) | ||||
|       DWORD len = found - src; | ||||
|       do | ||||
| 	{ | ||||
| 	  debug_printf ("write failed, handle %p", get_output_handle ()); | ||||
| 	  __seterrno (); | ||||
| 	  return 0; | ||||
| 	  DWORD buf_len; | ||||
| 	  char buf[CONVERT_LIMIT]; | ||||
| 	  done = buf_len = min (sizeof (buf), len); | ||||
| 	  if (!str_to_con (buf, (const char *) src, buf_len)) | ||||
| 	    { | ||||
| 	      debug_printf ("conversion error, handle %p", get_output_handle ()); | ||||
| 	      __seterrno (); | ||||
| 	      return 0; | ||||
| 	    } | ||||
|  | ||||
| 	  if (insert_mode) | ||||
| 	    { | ||||
| 	      int x, y; | ||||
| 	      cursor_get (&x, &y); | ||||
| 	      scroll_screen (x, y, -1, y, x + buf_len, y); | ||||
| 	    } | ||||
|  | ||||
| 	  if (!WriteFile (get_output_handle (), buf, buf_len, &done, 0)) | ||||
| 	    { | ||||
| 	      debug_printf ("write failed, handle %p", get_output_handle ()); | ||||
| 	      __seterrno (); | ||||
| 	      return 0; | ||||
| 	    } | ||||
| 	  len -= done; | ||||
| 	  src += done; | ||||
| 	} | ||||
| 	len -= done; | ||||
| 	src += done; | ||||
|       } while (len > 0); | ||||
|       while (len > 0); | ||||
|     } | ||||
|  | ||||
|   if (src < end) | ||||
|     { | ||||
|       int x, y; | ||||
| @@ -1368,7 +1425,7 @@ fhandler_console::write_normal (const unsigned char *src, | ||||
| 	case ESC: | ||||
| 	  state_ = gotesc; | ||||
| 	  break; | ||||
| 	case DWN:		/* WriteFile("\n") always adds CR... */ | ||||
| 	case DWN:		/* WriteFile ("\n") always adds CR... */ | ||||
| 	  cursor_get (&x, &y); | ||||
| 	  if (y >= srBottom) | ||||
| 	    { | ||||
| @@ -1496,7 +1553,7 @@ fhandler_console::write (const void *vsrc, size_t len) | ||||
| 	  state_ = normal; | ||||
| 	  break; | ||||
| 	case gotrsquare: | ||||
| 	  if (isdigit(*src)) | ||||
| 	  if (isdigit (*src)) | ||||
| 	    rarg = rarg * 10 + (*src - '0'); | ||||
| 	  else if (*src == ';' && (rarg == 2 || rarg == 0)) | ||||
| 	    state_ = gettitle; | ||||
| @@ -1663,7 +1720,7 @@ fhandler_console::fixup_after_fork (HANDLE) | ||||
|   /* Windows does not allow duplication of console handles between processes | ||||
|      so open the console explicitly. */ | ||||
|  | ||||
|   if (!open(get_name (), get_flags (), 0)) | ||||
|   if (!open (get_name (), get_flags (), 0)) | ||||
|     system_printf ("error opening console after fork, %E"); | ||||
|  | ||||
|   if (!get_close_on_exec ()) | ||||
| @@ -1678,8 +1735,8 @@ set_console_title (char *title) | ||||
| { | ||||
|   int rc; | ||||
|   char buf[257]; | ||||
|   strncpy(buf, title, sizeof(buf) - 1); | ||||
|   buf[sizeof(buf) - 1] = '\0'; | ||||
|   strncpy (buf, title, sizeof (buf) - 1); | ||||
|   buf[sizeof (buf) - 1] = '\0'; | ||||
|   if ((rc = WaitForSingleObject (title_mutex, 15000)) != WAIT_OBJECT_0) | ||||
|     sigproc_printf ("wait for title mutex failed rc %d, %E", rc); | ||||
|   SetConsoleTitle (buf); | ||||
| @@ -1693,7 +1750,7 @@ fhandler_console::fixup_after_exec (HANDLE) | ||||
|   HANDLE h = get_handle (); | ||||
|   HANDLE oh = get_output_handle (); | ||||
|  | ||||
|   if (!open(get_name (), get_flags (), 0)) | ||||
|   if (!open (get_name (), get_flags (), 0)) | ||||
|     { | ||||
|       int sawerr = 0; | ||||
|       if (!get_io_handle ()) | ||||
|   | ||||
| @@ -16,237 +16,237 @@ | ||||
| extern "C" | ||||
| { | ||||
| /*  ThreadCreation */ | ||||
|   int | ||||
|     pthread_create (pthread_t * thread, const pthread_attr_t * attr, | ||||
| 		    void *(*start_routine) (void *), void *arg) | ||||
|   { | ||||
|     return __pthread_create (thread, attr, start_routine, arg); | ||||
|   } | ||||
| int | ||||
|   pthread_create (pthread_t * thread, const pthread_attr_t * attr, | ||||
| 		  void *(*start_routine) (void *), void *arg) | ||||
| { | ||||
|   return __pthread_create (thread, attr, start_routine, arg); | ||||
| } | ||||
|  | ||||
|   int pthread_attr_init (pthread_attr_t * attr) | ||||
|   { | ||||
|     return __pthread_attr_init (attr); | ||||
|   } | ||||
| int pthread_attr_init (pthread_attr_t * attr) | ||||
| { | ||||
|   return __pthread_attr_init (attr); | ||||
| } | ||||
|  | ||||
|   int pthread_attr_destroy (pthread_attr_t * attr) | ||||
|   { | ||||
|     return __pthread_attr_destroy (attr); | ||||
|   } | ||||
| int pthread_attr_destroy (pthread_attr_t * attr) | ||||
| { | ||||
|   return __pthread_attr_destroy (attr); | ||||
| } | ||||
|  | ||||
|   int pthread_attr_setdetachstate (pthread_attr_t * attr, int detachstate) | ||||
|   { | ||||
|     return __pthread_attr_setdetachstate (attr, detachstate); | ||||
|   } | ||||
| int pthread_attr_setdetachstate (pthread_attr_t * attr, int detachstate) | ||||
| { | ||||
|   return __pthread_attr_setdetachstate (attr, detachstate); | ||||
| } | ||||
|  | ||||
|   int | ||||
|     pthread_attr_getdetachstate (const pthread_attr_t * attr, | ||||
| 				 int *detachstate) | ||||
|   { | ||||
|     return __pthread_attr_getdetachstate (attr, detachstate); | ||||
|   } | ||||
| int | ||||
|   pthread_attr_getdetachstate (const pthread_attr_t * attr, | ||||
| 			       int *detachstate) | ||||
| { | ||||
|   return __pthread_attr_getdetachstate (attr, detachstate); | ||||
| } | ||||
|  | ||||
|  | ||||
|   int pthread_attr_setstacksize (pthread_attr_t * attr, size_t size) | ||||
|   { | ||||
|     return __pthread_attr_setstacksize (attr, size); | ||||
|   } | ||||
| int pthread_attr_setstacksize (pthread_attr_t * attr, size_t size) | ||||
| { | ||||
|   return __pthread_attr_setstacksize (attr, size); | ||||
| } | ||||
|  | ||||
|   int pthread_attr_getstacksize (pthread_attr_t * attr, size_t * size) | ||||
|   { | ||||
|     return __pthread_attr_getstacksize (attr, size); | ||||
|   } | ||||
| int pthread_attr_getstacksize (pthread_attr_t * attr, size_t * size) | ||||
| { | ||||
|   return __pthread_attr_getstacksize (attr, size); | ||||
| } | ||||
|  | ||||
|  | ||||
| /* | ||||
|    pthread_attr_setstackaddr(...){}; | ||||
|    pthread_attr_getstackaddr(...){}; | ||||
|  */ | ||||
|  pthread_attr_setstackaddr(...){}; | ||||
|  pthread_attr_getstackaddr(...){}; | ||||
| */ | ||||
|  | ||||
| /* Thread Exit */ | ||||
|   void pthread_exit (void *value_ptr) | ||||
|   { | ||||
|     return __pthread_exit (value_ptr); | ||||
|   } | ||||
| void pthread_exit (void *value_ptr) | ||||
| { | ||||
|   return __pthread_exit (value_ptr); | ||||
| } | ||||
|  | ||||
|   int pthread_join (pthread_t thread, void **return_val) | ||||
|   { | ||||
|     return __pthread_join (&thread, (void **) return_val); | ||||
|   } | ||||
| int pthread_join (pthread_t thread, void **return_val) | ||||
| { | ||||
|   return __pthread_join (&thread, (void **) return_val); | ||||
| } | ||||
|  | ||||
|   int pthread_detach (pthread_t thread) | ||||
|   { | ||||
|     return __pthread_detach (&thread); | ||||
|   } | ||||
| int pthread_detach (pthread_t thread) | ||||
| { | ||||
|   return __pthread_detach (&thread); | ||||
| } | ||||
|  | ||||
|   int pthread_suspend (pthread_t thread) | ||||
|   { | ||||
|     return __pthread_suspend (&thread); | ||||
|   } | ||||
| int pthread_suspend (pthread_t thread) | ||||
| { | ||||
|   return __pthread_suspend (&thread); | ||||
| } | ||||
|  | ||||
|   int pthread_continue (pthread_t thread) | ||||
|   { | ||||
|     return __pthread_continue (&thread); | ||||
|   } | ||||
| int pthread_continue (pthread_t thread) | ||||
| { | ||||
|   return __pthread_continue (&thread); | ||||
| } | ||||
|  | ||||
|   unsigned long pthread_getsequence_np (pthread_t * thread) | ||||
|   { | ||||
|     return __pthread_getsequence_np (thread); | ||||
|   } | ||||
| unsigned long pthread_getsequence_np (pthread_t * thread) | ||||
| { | ||||
|   return __pthread_getsequence_np (thread); | ||||
| } | ||||
|  | ||||
| /* Thread SpecificData */ | ||||
|   int pthread_key_create (pthread_key_t * key, void (*destructor) (void *)) | ||||
|   { | ||||
|     return __pthread_key_create (key, destructor); | ||||
|   } | ||||
| int pthread_key_create (pthread_key_t * key, void (*destructor) (void *)) | ||||
| { | ||||
|   return __pthread_key_create (key, destructor); | ||||
| } | ||||
|  | ||||
|   int pthread_key_delete (pthread_key_t * key) | ||||
|   { | ||||
|     return __pthread_key_delete (key); | ||||
|   } | ||||
| int pthread_key_delete (pthread_key_t * key) | ||||
| { | ||||
|   return __pthread_key_delete (key); | ||||
| } | ||||
|  | ||||
|   int pthread_setspecific (pthread_key_t key, const void *value) | ||||
|   { | ||||
|     return __pthread_setspecific (key, value); | ||||
|   } | ||||
| int pthread_setspecific (pthread_key_t key, const void *value) | ||||
| { | ||||
|   return __pthread_setspecific (key, value); | ||||
| } | ||||
|  | ||||
|   void *pthread_getspecific (pthread_key_t key) | ||||
|   { | ||||
|     return (void *) __pthread_getspecific (key); | ||||
|   } | ||||
| void *pthread_getspecific (pthread_key_t key) | ||||
| { | ||||
|   return (void *) __pthread_getspecific (key); | ||||
| } | ||||
|  | ||||
| /* Thread signal */ | ||||
|   int pthread_kill (pthread_t * thread, int sig) | ||||
|   { | ||||
|     return __pthread_kill (thread, sig); | ||||
|   } | ||||
| int pthread_kill (pthread_t * thread, int sig) | ||||
| { | ||||
|   return __pthread_kill (thread, sig); | ||||
| } | ||||
|  | ||||
|   int | ||||
|     pthread_sigmask (int operation, const sigset_t * set, sigset_t * old_set) | ||||
|   { | ||||
|     return __pthread_sigmask (operation, set, old_set); | ||||
|   } | ||||
| int | ||||
|   pthread_sigmask (int operation, const sigset_t * set, sigset_t * old_set) | ||||
| { | ||||
|   return __pthread_sigmask (operation, set, old_set); | ||||
| } | ||||
|  | ||||
| /*  ID */ | ||||
|  | ||||
|   pthread_t pthread_self () | ||||
|   { | ||||
|     return __pthread_self (); | ||||
|   } | ||||
| pthread_t pthread_self () | ||||
| { | ||||
|   return __pthread_self (); | ||||
| } | ||||
|  | ||||
|   int pthread_equal (pthread_t t1, pthread_t t2) | ||||
|   { | ||||
|     return __pthread_equal (&t1, &t2); | ||||
|   } | ||||
| int pthread_equal (pthread_t t1, pthread_t t2) | ||||
| { | ||||
|   return __pthread_equal (&t1, &t2); | ||||
| } | ||||
|  | ||||
| /* Mutexes  */ | ||||
|   int | ||||
|     pthread_mutex_init (pthread_mutex_t * mutex, | ||||
| 			const pthread_mutexattr_t * attr) | ||||
|   { | ||||
|     return __pthread_mutex_init (mutex, attr); | ||||
|   } | ||||
| int | ||||
|   pthread_mutex_init (pthread_mutex_t * mutex, | ||||
| 		      const pthread_mutexattr_t * attr) | ||||
| { | ||||
|   return __pthread_mutex_init (mutex, attr); | ||||
| } | ||||
|  | ||||
|   int pthread_mutex_lock (pthread_mutex_t * mutex) | ||||
|   { | ||||
|     return __pthread_mutex_lock (mutex); | ||||
|   } | ||||
| int pthread_mutex_lock (pthread_mutex_t * mutex) | ||||
| { | ||||
|   return __pthread_mutex_lock (mutex); | ||||
| } | ||||
|  | ||||
|   int pthread_mutex_trylock (pthread_mutex_t * mutex) | ||||
|   { | ||||
|     return __pthread_mutex_trylock (mutex); | ||||
|   } | ||||
| int pthread_mutex_trylock (pthread_mutex_t * mutex) | ||||
| { | ||||
|   return __pthread_mutex_trylock (mutex); | ||||
| } | ||||
|  | ||||
|   int pthread_mutex_unlock (pthread_mutex_t * mutex) | ||||
|   { | ||||
|     return __pthread_mutex_unlock (mutex); | ||||
|   } | ||||
| int pthread_mutex_unlock (pthread_mutex_t * mutex) | ||||
| { | ||||
|   return __pthread_mutex_unlock (mutex); | ||||
| } | ||||
|  | ||||
|   int pthread_mutex_destroy (pthread_mutex_t * mutex) | ||||
|   { | ||||
|     return __pthread_mutex_destroy (mutex); | ||||
|   } | ||||
| int pthread_mutex_destroy (pthread_mutex_t * mutex) | ||||
| { | ||||
|   return __pthread_mutex_destroy (mutex); | ||||
| } | ||||
|  | ||||
| /* Synchronisation */ | ||||
|  | ||||
|   int pthread_cond_destroy (pthread_cond_t * cond) | ||||
|   { | ||||
|     return __pthread_cond_destroy (cond); | ||||
|   } | ||||
| int pthread_cond_destroy (pthread_cond_t * cond) | ||||
| { | ||||
|   return __pthread_cond_destroy (cond); | ||||
| } | ||||
|  | ||||
|   int | ||||
|     pthread_cond_init (pthread_cond_t * cond, const pthread_condattr_t * attr) | ||||
|   { | ||||
|     return __pthread_cond_init (cond, attr); | ||||
|   } | ||||
| int | ||||
|   pthread_cond_init (pthread_cond_t * cond, const pthread_condattr_t * attr) | ||||
| { | ||||
|   return __pthread_cond_init (cond, attr); | ||||
| } | ||||
|  | ||||
|   int pthread_cond_signal (pthread_cond_t * cond) | ||||
|   { | ||||
|     return __pthread_cond_signal (cond); | ||||
|   } | ||||
| int pthread_cond_signal (pthread_cond_t * cond) | ||||
| { | ||||
|   return __pthread_cond_signal (cond); | ||||
| } | ||||
|  | ||||
|   int pthread_cond_broadcast (pthread_cond_t * cond) | ||||
|   { | ||||
|     return __pthread_cond_broadcast (cond); | ||||
|   } | ||||
| int pthread_cond_broadcast (pthread_cond_t * cond) | ||||
| { | ||||
|   return __pthread_cond_broadcast (cond); | ||||
| } | ||||
|  | ||||
|   int | ||||
|     pthread_cond_timedwait (pthread_cond_t * cond, | ||||
| 			    pthread_mutex_t * mutex, | ||||
| 			    const struct timespec *abstime) | ||||
|   { | ||||
|     return __pthread_cond_timedwait (cond, mutex, abstime); | ||||
|   } | ||||
| int | ||||
|   pthread_cond_timedwait (pthread_cond_t * cond, | ||||
| 			  pthread_mutex_t * mutex, | ||||
| 			  const struct timespec *abstime) | ||||
| { | ||||
|   return __pthread_cond_timedwait (cond, mutex, abstime); | ||||
| } | ||||
|  | ||||
|   int pthread_cond_wait (pthread_cond_t * cond, pthread_mutex_t * mutex) | ||||
|   { | ||||
|     return __pthread_cond_wait (cond, mutex); | ||||
|   } | ||||
| int pthread_cond_wait (pthread_cond_t * cond, pthread_mutex_t * mutex) | ||||
| { | ||||
|   return __pthread_cond_wait (cond, mutex); | ||||
| } | ||||
|  | ||||
|   int pthread_condattr_init (pthread_condattr_t * condattr) | ||||
|   { | ||||
|     return __pthread_condattr_init (condattr); | ||||
|   } | ||||
| int pthread_condattr_init (pthread_condattr_t * condattr) | ||||
| { | ||||
|   return __pthread_condattr_init (condattr); | ||||
| } | ||||
|  | ||||
|   int pthread_condattr_destroy (pthread_condattr_t * condattr) | ||||
|   { | ||||
|     return __pthread_condattr_destroy (condattr); | ||||
|   } | ||||
| int pthread_condattr_destroy (pthread_condattr_t * condattr) | ||||
| { | ||||
|   return __pthread_condattr_destroy (condattr); | ||||
| } | ||||
|  | ||||
|   int | ||||
|     pthread_condattr_getpshared (const pthread_condattr_t * attr, | ||||
| 				 int *pshared) | ||||
|   { | ||||
|     return __pthread_condattr_getpshared (attr, pshared); | ||||
|   } | ||||
| int | ||||
|   pthread_condattr_getpshared (const pthread_condattr_t * attr, | ||||
| 			       int *pshared) | ||||
| { | ||||
|   return __pthread_condattr_getpshared (attr, pshared); | ||||
| } | ||||
|  | ||||
|   int pthread_condattr_setpshared (pthread_condattr_t * attr, int pshared) | ||||
|   { | ||||
|     return __pthread_condattr_setpshared (attr, pshared); | ||||
|   } | ||||
| int pthread_condattr_setpshared (pthread_condattr_t * attr, int pshared) | ||||
| { | ||||
|   return __pthread_condattr_setpshared (attr, pshared); | ||||
| } | ||||
|  | ||||
| /* Semaphores */ | ||||
|   int sem_init (sem_t * sem, int pshared, unsigned int value) | ||||
|   { | ||||
|     return __sem_init (sem, pshared, value); | ||||
|   } | ||||
|  | ||||
|   int sem_destroy (sem_t * sem) | ||||
|   { | ||||
|     return __sem_destroy (sem); | ||||
|   } | ||||
|  | ||||
|   int sem_wait (sem_t * sem) | ||||
|   { | ||||
|     return __sem_wait (sem); | ||||
|   } | ||||
|  | ||||
|   int sem_trywait (sem_t * sem) | ||||
|   { | ||||
|     return __sem_trywait (sem); | ||||
|   } | ||||
|  | ||||
|   int sem_post (sem_t * sem) | ||||
|   { | ||||
|     return __sem_post (sem); | ||||
|   } | ||||
| int sem_init (sem_t * sem, int pshared, unsigned int value) | ||||
| { | ||||
|   return __sem_init (sem, pshared, value); | ||||
| } | ||||
|  | ||||
| int sem_destroy (sem_t * sem) | ||||
| { | ||||
|   return __sem_destroy (sem); | ||||
| } | ||||
|  | ||||
| int sem_wait (sem_t * sem) | ||||
| { | ||||
|   return __sem_wait (sem); | ||||
| } | ||||
|  | ||||
| int sem_trywait (sem_t * sem) | ||||
| { | ||||
|   return __sem_trywait (sem); | ||||
| } | ||||
|  | ||||
| int sem_post (sem_t * sem) | ||||
| { | ||||
|   return __sem_post (sem); | ||||
| } | ||||
| } | ||||
|   | ||||
| @@ -110,7 +110,6 @@ BOOL __stdcall pid_exists (pid_t) __attribute__ ((regparm(1))); | ||||
| int __stdcall sig_send (_pinfo *, int, DWORD ebp = (DWORD) __builtin_frame_address (0))  __attribute__ ((regparm(3))); | ||||
| void __stdcall signal_fixup_after_fork (); | ||||
| void __stdcall signal_fixup_after_exec (bool); | ||||
| extern "C" int __stdcall call_signal_handler (); | ||||
|  | ||||
| extern char myself_nowait_dummy[]; | ||||
| extern char myself_nowait_nonmain_dummy[]; | ||||
|   | ||||
| @@ -1079,172 +1079,172 @@ __sem_post (sem_t * sem) | ||||
| // empty functions needed when makeing the dll without mt_safe support | ||||
| extern "C" | ||||
| { | ||||
|   int __pthread_create (pthread_t *, const pthread_attr_t *, | ||||
| 			TFD (start_routine), void *arg) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_attr_init (pthread_attr_t * attr) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_attr_destroy (pthread_attr_t * attr) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_attr_setdetachstate (pthread_attr_t * attr, int detachstate) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int | ||||
|     __pthread_attr_getdetachstate (const pthread_attr_t * attr, | ||||
| 				   int *detachstate) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_attr_setstacksize (pthread_attr_t * attr, size_t size) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_attr_getstacksize (pthread_attr_t * attr, size_t * size) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
| int __pthread_create (pthread_t *, const pthread_attr_t *, | ||||
| 		      TFD (start_routine), void *arg) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_attr_init (pthread_attr_t * attr) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_attr_destroy (pthread_attr_t * attr) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_attr_setdetachstate (pthread_attr_t * attr, int detachstate) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int | ||||
|   __pthread_attr_getdetachstate (const pthread_attr_t * attr, | ||||
| 				 int *detachstate) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_attr_setstacksize (pthread_attr_t * attr, size_t size) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_attr_getstacksize (pthread_attr_t * attr, size_t * size) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| /* these cannot be supported on win32 - the os allocates it's own stack space.. | ||||
|    __pthread_attr_setstackaddr (...){ return -1; }; | ||||
|    __pthread_attr_getstackaddr (...){ return -1; }; | ||||
|  */ | ||||
|   int __pthread_exit (void *value_ptr) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|  __pthread_attr_setstackaddr (...){ return -1; }; | ||||
|  __pthread_attr_getstackaddr (...){ return -1; }; | ||||
| */ | ||||
| int __pthread_exit (void *value_ptr) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
|  | ||||
|   int __pthread_join (pthread_t thread_id, void **return_val) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
| int __pthread_join (pthread_t thread_id, void **return_val) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
|  | ||||
|   unsigned long __pthread_getsequence_np (pthread_t * thread) | ||||
|   { | ||||
|     return 0; | ||||
|   } | ||||
|   int __pthread_key_create (pthread_key_t * key) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_key_delete (pthread_key_t * key) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_setspecific (pthread_key_t * key, const void *value) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   void *__pthread_getspecific (pthread_key_t * key) | ||||
|   { | ||||
|     return NULL; | ||||
|   } | ||||
|   int __pthread_kill (pthread_t * thread, int sig) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_sigmask (int operation, const sigset_t * set, | ||||
| 			 sigset_t * old_set) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   pthread_t __pthread_self () | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_equal (pthread_t * t1, pthread_t * t2) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_mutex_lock (pthread_mutex_t *) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_mutex_trylock (pthread_mutex_t *) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_mutex_unlock (pthread_mutex_t *) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_mutex_destroy (pthread_mutex_t *) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_cond_destroy (pthread_cond_t *) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_cond_init (pthread_cond_t *, const pthread_condattr_t *) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_cond_signal (pthread_cond_t *) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_cond_broadcast (pthread_cond_t *) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_cond_timedwait (pthread_cond_t *, pthread_mutex_t *, | ||||
| 				const struct timespec *) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_cond_wait (pthread_cond_t *, pthread_mutex_t *) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_condattr_init (pthread_condattr_t *) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_condattr_destroy (pthread_condattr_t *) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_condattr_getpshared (pthread_condattr_t *, int *) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __pthread_condattr_setpshared (pthread_condattr_t *, int) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __sem_init (sem_t * sem, int pshared, unsigned int value) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __sem_destroy (sem_t * sem) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __sem_wait (sem_t * sem) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __sem_trywait (sem_t * sem) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   int __sem_post (sem_t * sem) | ||||
|   { | ||||
|     return -1; | ||||
|   } | ||||
|   struct _reent *_reent_clib () | ||||
|   { | ||||
|     return NULL; | ||||
| unsigned long __pthread_getsequence_np (pthread_t * thread) | ||||
| { | ||||
|   return 0; | ||||
| } | ||||
| int __pthread_key_create (pthread_key_t * key) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_key_delete (pthread_key_t * key) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_setspecific (pthread_key_t * key, const void *value) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| void *__pthread_getspecific (pthread_key_t * key) | ||||
| { | ||||
|   return NULL; | ||||
| } | ||||
| int __pthread_kill (pthread_t * thread, int sig) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_sigmask (int operation, const sigset_t * set, | ||||
| 		       sigset_t * old_set) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| pthread_t __pthread_self () | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_equal (pthread_t * t1, pthread_t * t2) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_mutex_lock (pthread_mutex_t *) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_mutex_trylock (pthread_mutex_t *) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_mutex_unlock (pthread_mutex_t *) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_mutex_destroy (pthread_mutex_t *) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_cond_destroy (pthread_cond_t *) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_cond_init (pthread_cond_t *, const pthread_condattr_t *) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_cond_signal (pthread_cond_t *) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_cond_broadcast (pthread_cond_t *) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_cond_timedwait (pthread_cond_t *, pthread_mutex_t *, | ||||
| 			      const struct timespec *) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_cond_wait (pthread_cond_t *, pthread_mutex_t *) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_condattr_init (pthread_condattr_t *) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_condattr_destroy (pthread_condattr_t *) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_condattr_getpshared (pthread_condattr_t *, int *) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __pthread_condattr_setpshared (pthread_condattr_t *, int) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __sem_init (sem_t * sem, int pshared, unsigned int value) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __sem_destroy (sem_t * sem) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __sem_wait (sem_t * sem) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __sem_trywait (sem_t * sem) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| int __sem_post (sem_t * sem) | ||||
| { | ||||
|   return -1; | ||||
| } | ||||
| struct _reent *_reent_clib () | ||||
| { | ||||
|   return NULL; | ||||
|   } | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user