Consistently use va_end.
* external.cc (cygwin_internal): Use va_end. * fork.cc (child_copy): Likewise. * libc/bsdlib.cc (warn, warnx, err, errx): Likewise. * pinfo.cc (commune_request): Likewise. * strace.cc (strace::prntf, strace_printf): Likewise.
This commit is contained in:
		| @@ -1,3 +1,11 @@ | |||||||
|  | 2009-10-13  Eric Blake  <ebb9@byu.net> | ||||||
|  |  | ||||||
|  | 	* external.cc (cygwin_internal): Use va_end. | ||||||
|  | 	* fork.cc (child_copy): Likewise. | ||||||
|  | 	* libc/bsdlib.cc (warn, warnx, err, errx): Likewise. | ||||||
|  | 	* pinfo.cc (commune_request): Likewise. | ||||||
|  | 	* strace.cc (strace::prntf, strace_printf): Likewise. | ||||||
|  |  | ||||||
| 2009-10-13  Corinna Vinschen  <corinna@vinschen.de> | 2009-10-13  Corinna Vinschen  <corinna@vinschen.de> | ||||||
|  |  | ||||||
| 	* include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. | 	* include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. | ||||||
|   | |||||||
| @@ -197,34 +197,42 @@ extern "C" unsigned long | |||||||
| cygwin_internal (cygwin_getinfo_types t, ...) | cygwin_internal (cygwin_getinfo_types t, ...) | ||||||
| { | { | ||||||
|   va_list arg; |   va_list arg; | ||||||
|  |   unsigned long res = -1; | ||||||
|   va_start (arg, t); |   va_start (arg, t); | ||||||
|  |  | ||||||
|   switch (t) |   switch (t) | ||||||
|     { |     { | ||||||
|       case CW_LOCK_PINFO: |       case CW_LOCK_PINFO: | ||||||
| 	return 1; | 	res = 1; | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_UNLOCK_PINFO: |       case CW_UNLOCK_PINFO: | ||||||
| 	return 1; | 	res = 1; | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_GETTHREADNAME: |       case CW_GETTHREADNAME: | ||||||
| 	return (DWORD) cygthread::name (va_arg (arg, DWORD)); | 	res = (DWORD) cygthread::name (va_arg (arg, DWORD)); | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_SETTHREADNAME: |       case CW_SETTHREADNAME: | ||||||
| 	{ | 	{ | ||||||
| 	  set_errno (ENOSYS); | 	  set_errno (ENOSYS); | ||||||
| 	  return 0; | 	  res = 0; | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_GETPINFO: |       case CW_GETPINFO: | ||||||
| 	return (DWORD) fillout_pinfo (va_arg (arg, DWORD), 0); | 	res = (DWORD) fillout_pinfo (va_arg (arg, DWORD), 0); | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_GETVERSIONINFO: |       case CW_GETVERSIONINFO: | ||||||
| 	return (DWORD) cygwin_version_strings; | 	res = (DWORD) cygwin_version_strings; | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_READ_V1_MOUNT_TABLES: |       case CW_READ_V1_MOUNT_TABLES: | ||||||
| 	set_errno (ENOSYS); | 	set_errno (ENOSYS); | ||||||
| 	return 1; | 	res = 1; | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_USER_DATA: |       case CW_USER_DATA: | ||||||
| 	/* This is a kludge to work around a version of _cygwin_common_crt0 | 	/* This is a kludge to work around a version of _cygwin_common_crt0 | ||||||
| @@ -232,25 +240,30 @@ cygwin_internal (cygwin_getinfo_types t, ...) | |||||||
| 	   Hilarity ensues if the DLL is not loaded like while the process | 	   Hilarity ensues if the DLL is not loaded like while the process | ||||||
| 	   is forking. */ | 	   is forking. */ | ||||||
| 	__cygwin_user_data.cxx_malloc = &default_cygwin_cxx_malloc; | 	__cygwin_user_data.cxx_malloc = &default_cygwin_cxx_malloc; | ||||||
| 	return (DWORD) &__cygwin_user_data; | 	res = (DWORD) &__cygwin_user_data; | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_PERFILE: |       case CW_PERFILE: | ||||||
| 	perfile_table = va_arg (arg, struct __cygwin_perfile *); | 	perfile_table = va_arg (arg, struct __cygwin_perfile *); | ||||||
| 	return 0; | 	res = 0; | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_GET_CYGDRIVE_PREFIXES: |       case CW_GET_CYGDRIVE_PREFIXES: | ||||||
| 	{ | 	{ | ||||||
| 	  char *user = va_arg (arg, char *); | 	  char *user = va_arg (arg, char *); | ||||||
| 	  char *system = va_arg (arg, char *); | 	  char *system = va_arg (arg, char *); | ||||||
| 	  return get_cygdrive_info (user, system, NULL, NULL); | 	  res = get_cygdrive_info (user, system, NULL, NULL); | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_GETPINFO_FULL: |       case CW_GETPINFO_FULL: | ||||||
| 	return (DWORD) fillout_pinfo (va_arg (arg, pid_t), 1); | 	res = (DWORD) fillout_pinfo (va_arg (arg, pid_t), 1); | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_INIT_EXCEPTIONS: |       case CW_INIT_EXCEPTIONS: | ||||||
| 	/* noop */ /* init_exceptions (va_arg (arg, exception_list *)); */ | 	/* noop */ /* init_exceptions (va_arg (arg, exception_list *)); */ | ||||||
| 	return 0; | 	res = 0; | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_GET_CYGDRIVE_INFO: |       case CW_GET_CYGDRIVE_INFO: | ||||||
| 	{ | 	{ | ||||||
| @@ -258,12 +271,14 @@ cygwin_internal (cygwin_getinfo_types t, ...) | |||||||
| 	  char *system = va_arg (arg, char *); | 	  char *system = va_arg (arg, char *); | ||||||
| 	  char *user_flags = va_arg (arg, char *); | 	  char *user_flags = va_arg (arg, char *); | ||||||
| 	  char *system_flags = va_arg (arg, char *); | 	  char *system_flags = va_arg (arg, char *); | ||||||
| 	  return get_cygdrive_info (user, system, user_flags, system_flags); | 	  res = get_cygdrive_info (user, system, user_flags, system_flags); | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_SET_CYGWIN_REGISTRY_NAME: |       case CW_SET_CYGWIN_REGISTRY_NAME: | ||||||
|       case CW_GET_CYGWIN_REGISTRY_NAME: |       case CW_GET_CYGWIN_REGISTRY_NAME: | ||||||
| 	return 0; | 	res = 0; | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_STRACE_TOGGLE: |       case CW_STRACE_TOGGLE: | ||||||
| 	{ | 	{ | ||||||
| @@ -272,25 +287,28 @@ cygwin_internal (cygwin_getinfo_types t, ...) | |||||||
| 	  if (p) | 	  if (p) | ||||||
| 	    { | 	    { | ||||||
| 	      sig_send (p, __SIGSTRACE); | 	      sig_send (p, __SIGSTRACE); | ||||||
| 	      return 0; | 	      res = 0; | ||||||
| 	    } | 	    } | ||||||
| 	  else | 	  else | ||||||
| 	    { | 	    { | ||||||
| 	      set_errno (ESRCH); | 	      set_errno (ESRCH); | ||||||
| 	      return (DWORD) -1; | 	      res = (DWORD) -1; | ||||||
| 	    } | 	    } | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_STRACE_ACTIVE: |       case CW_STRACE_ACTIVE: | ||||||
| 	{ | 	{ | ||||||
| 	  return strace.active (); | 	  res = strace.active (); | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       case CW_CYGWIN_PID_TO_WINPID: |       case CW_CYGWIN_PID_TO_WINPID: | ||||||
| 	{ | 	{ | ||||||
| 	  pinfo p (va_arg (arg, pid_t)); | 	  pinfo p (va_arg (arg, pid_t)); | ||||||
| 	  return p ? p->dwProcessId : 0; | 	  res = p ? p->dwProcessId : 0; | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|       case CW_EXTRACT_DOMAIN_AND_USER: |       case CW_EXTRACT_DOMAIN_AND_USER: | ||||||
| 	{ | 	{ | ||||||
| 	  WCHAR nt_domain[MAX_DOMAIN_NAME_LEN + 1]; | 	  WCHAR nt_domain[MAX_DOMAIN_NAME_LEN + 1]; | ||||||
| @@ -304,26 +322,30 @@ cygwin_internal (cygwin_getinfo_types t, ...) | |||||||
| 	    sys_wcstombs (domain, MAX_DOMAIN_NAME_LEN + 1, nt_domain); | 	    sys_wcstombs (domain, MAX_DOMAIN_NAME_LEN + 1, nt_domain); | ||||||
| 	  if (user) | 	  if (user) | ||||||
| 	    sys_wcstombs (user, UNLEN + 1, nt_user); | 	    sys_wcstombs (user, UNLEN + 1, nt_user); | ||||||
| 	  return 0; | 	  res = 0; | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|       case CW_CMDLINE: |       case CW_CMDLINE: | ||||||
| 	{ | 	{ | ||||||
| 	  size_t n; | 	  size_t n; | ||||||
| 	  pid_t pid = va_arg (arg, pid_t); | 	  pid_t pid = va_arg (arg, pid_t); | ||||||
| 	  pinfo p (pid); | 	  pinfo p (pid); | ||||||
| 	  return (DWORD) p->cmdline (n); | 	  res = (DWORD) p->cmdline (n); | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|       case CW_CHECK_NTSEC: |       case CW_CHECK_NTSEC: | ||||||
| 	{ | 	{ | ||||||
| 	  char *filename = va_arg (arg, char *); | 	  char *filename = va_arg (arg, char *); | ||||||
| 	  return check_ntsec (filename); | 	  res = check_ntsec (filename); | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|       case CW_GET_ERRNO_FROM_WINERROR: |       case CW_GET_ERRNO_FROM_WINERROR: | ||||||
| 	{ | 	{ | ||||||
| 	  int error = va_arg (arg, int); | 	  int error = va_arg (arg, int); | ||||||
| 	  int deferrno = va_arg (arg, int); | 	  int deferrno = va_arg (arg, int); | ||||||
| 	  return geterrno_from_win_error (error, deferrno); | 	  res = geterrno_from_win_error (error, deferrno); | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|       case CW_GET_POSIX_SECURITY_ATTRIBUTE: |       case CW_GET_POSIX_SECURITY_ATTRIBUTE: | ||||||
| 	{ | 	{ | ||||||
| 	  path_conv dummy; | 	  path_conv dummy; | ||||||
| @@ -334,24 +356,31 @@ cygwin_internal (cygwin_getinfo_types t, ...) | |||||||
| 	  DWORD sd_buf_size = va_arg (arg, DWORD); | 	  DWORD sd_buf_size = va_arg (arg, DWORD); | ||||||
| 	  set_security_attribute (dummy, attribute, psa, sd); | 	  set_security_attribute (dummy, attribute, psa, sd); | ||||||
| 	  if (!psa->lpSecurityDescriptor) | 	  if (!psa->lpSecurityDescriptor) | ||||||
| 	    return sd.size (); | 	    res = sd.size (); | ||||||
| 	  psa->lpSecurityDescriptor = sd_buf; | 	  else | ||||||
| 	  return sd.copy (sd_buf, sd_buf_size); | 	    { | ||||||
|  | 	      psa->lpSecurityDescriptor = sd_buf; | ||||||
|  | 	      res = sd.copy (sd_buf, sd_buf_size); | ||||||
|  | 	    } | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|       case CW_GET_SHMLBA: |       case CW_GET_SHMLBA: | ||||||
| 	{ | 	{ | ||||||
| 	  return getpagesize (); | 	  res = getpagesize (); | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|       case CW_GET_UID_FROM_SID: |       case CW_GET_UID_FROM_SID: | ||||||
| 	{ | 	{ | ||||||
| 	  cygpsid psid = va_arg (arg, PSID); | 	  cygpsid psid = va_arg (arg, PSID); | ||||||
| 	  return psid.get_id (false, NULL); | 	  res = psid.get_id (false, NULL); | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|       case CW_GET_GID_FROM_SID: |       case CW_GET_GID_FROM_SID: | ||||||
| 	{ | 	{ | ||||||
| 	  cygpsid psid = va_arg (arg, PSID); | 	  cygpsid psid = va_arg (arg, PSID); | ||||||
| 	  return psid.get_id (true, NULL); | 	  res = psid.get_id (true, NULL); | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|       case CW_GET_BINMODE: |       case CW_GET_BINMODE: | ||||||
| 	{ | 	{ | ||||||
| 	  const char *path = va_arg (arg, const char *); | 	  const char *path = va_arg (arg, const char *); | ||||||
| @@ -359,54 +388,62 @@ cygwin_internal (cygwin_getinfo_types t, ...) | |||||||
| 	  if (p.error) | 	  if (p.error) | ||||||
| 	    { | 	    { | ||||||
| 	      set_errno (p.error); | 	      set_errno (p.error); | ||||||
| 	      return (unsigned long) -1; | 	      res = (unsigned long) -1; | ||||||
| 	    } | 	    } | ||||||
| 	  return p.binmode (); | 	  else | ||||||
|  | 	    res = p.binmode (); | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|       case CW_HOOK: |       case CW_HOOK: | ||||||
| 	{ | 	{ | ||||||
| 	  const char *name = va_arg (arg, const char *); | 	  const char *name = va_arg (arg, const char *); | ||||||
| 	  const void *hookfn = va_arg (arg, const void *); | 	  const void *hookfn = va_arg (arg, const void *); | ||||||
| 	  WORD subsys; | 	  WORD subsys; | ||||||
| 	  return (unsigned long) hook_or_detect_cygwin (name, hookfn, subsys); | 	  res = (unsigned long) hook_or_detect_cygwin (name, hookfn, subsys); | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|       case CW_ARGV: |       case CW_ARGV: | ||||||
| 	{ | 	{ | ||||||
| 	  child_info_spawn *ci = (child_info_spawn *) get_cygwin_startup_info (); | 	  child_info_spawn *ci = (child_info_spawn *) get_cygwin_startup_info (); | ||||||
| 	  return (unsigned long) (ci ? ci->moreinfo->argv : NULL); | 	  res = (unsigned long) (ci ? ci->moreinfo->argv : NULL); | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|       case CW_ENVP: |       case CW_ENVP: | ||||||
| 	{ | 	{ | ||||||
| 	  child_info_spawn *ci = (child_info_spawn *) get_cygwin_startup_info (); | 	  child_info_spawn *ci = (child_info_spawn *) get_cygwin_startup_info (); | ||||||
| 	  return (unsigned long) (ci ? ci->moreinfo->envp : NULL); | 	  res = (unsigned long) (ci ? ci->moreinfo->envp : NULL); | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|       case CW_DEBUG_SELF: |       case CW_DEBUG_SELF: | ||||||
| 	error_start_init (va_arg (arg, const char *)); | 	error_start_init (va_arg (arg, const char *)); | ||||||
| 	try_to_debug (); | 	try_to_debug (); | ||||||
| 	break; | 	break; | ||||||
|       case CW_SYNC_WINENV: |       case CW_SYNC_WINENV: | ||||||
| 	sync_winenv (); | 	sync_winenv (); | ||||||
| 	return 0; | 	res = 0; | ||||||
|  | 	break; | ||||||
|       case CW_CYGTLS_PADSIZE: |       case CW_CYGTLS_PADSIZE: | ||||||
| 	return CYGTLS_PADSIZE; | 	res = CYGTLS_PADSIZE; | ||||||
|  | 	break; | ||||||
|       case CW_SET_DOS_FILE_WARNING: |       case CW_SET_DOS_FILE_WARNING: | ||||||
| 	{ | 	{ | ||||||
| 	  extern bool dos_file_warning; | 	  extern bool dos_file_warning; | ||||||
| 	  dos_file_warning = va_arg (arg, int); | 	  dos_file_warning = va_arg (arg, int); | ||||||
| 	  return 0; | 	  res = 0; | ||||||
| 	} | 	} | ||||||
| 	break; | 	break; | ||||||
|       case CW_SET_PRIV_KEY: |       case CW_SET_PRIV_KEY: | ||||||
| 	{ | 	{ | ||||||
| 	  const char *passwd = va_arg (arg, const char *); | 	  const char *passwd = va_arg (arg, const char *); | ||||||
| 	  return setlsapwd (passwd); | 	  res = setlsapwd (passwd); | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|       case CW_SETERRNO: |       case CW_SETERRNO: | ||||||
| 	{ | 	{ | ||||||
| 	  const char *file = va_arg (arg, const char *); | 	  const char *file = va_arg (arg, const char *); | ||||||
| 	  int line = va_arg (arg, int); | 	  int line = va_arg (arg, int); | ||||||
| 	  seterrno(file, line); | 	  seterrno(file, line); | ||||||
| 	  return 0; | 	  res = 0; | ||||||
| 	} | 	} | ||||||
| 	break; | 	break; | ||||||
|       case CW_EXIT_PROCESS: |       case CW_EXIT_PROCESS: | ||||||
| @@ -420,12 +457,13 @@ cygwin_internal (cygwin_getinfo_types t, ...) | |||||||
| 	  HANDLE token = va_arg (arg, HANDLE); | 	  HANDLE token = va_arg (arg, HANDLE); | ||||||
| 	  int type = va_arg (arg, int); | 	  int type = va_arg (arg, int); | ||||||
| 	  set_imp_token (token, type); | 	  set_imp_token (token, type); | ||||||
| 	  return 0; | 	  res = 0; | ||||||
| 	} | 	} | ||||||
|  | 	break; | ||||||
|  |  | ||||||
|       default: |       default: | ||||||
| 	break; | 	set_errno (ENOSYS); | ||||||
|     } |     } | ||||||
|   set_errno (ENOSYS); |   va_end (arg); | ||||||
|   return (unsigned long) -1; |   return res; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -758,10 +758,12 @@ child_copy (HANDLE hp, bool write, ...) | |||||||
| 	} | 	} | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |   va_end (args); | ||||||
|   debug_printf ("done"); |   debug_printf ("done"); | ||||||
|   return true; |   return true; | ||||||
|  |  | ||||||
|  err: |  err: | ||||||
|  |   va_end (args); | ||||||
|   TerminateProcess (hp, 1); |   TerminateProcess (hp, 1); | ||||||
|   set_errno (EAGAIN); |   set_errno (EAGAIN); | ||||||
|   return false; |   return false; | ||||||
|   | |||||||
| @@ -181,6 +181,7 @@ warn (const char *fmt, ...) | |||||||
|   va_list ap; |   va_list ap; | ||||||
|   va_start (ap, fmt); |   va_start (ap, fmt); | ||||||
|   vwarn (fmt, ap); |   vwarn (fmt, ap); | ||||||
|  |   va_end (ap); | ||||||
| } | } | ||||||
|  |  | ||||||
| extern "C" void | extern "C" void | ||||||
| @@ -189,6 +190,7 @@ warnx (const char *fmt, ...) | |||||||
|   va_list ap; |   va_list ap; | ||||||
|   va_start (ap, fmt); |   va_start (ap, fmt); | ||||||
|   vwarnx (fmt, ap); |   vwarnx (fmt, ap); | ||||||
|  |   va_end (ap); | ||||||
| } | } | ||||||
|  |  | ||||||
| extern "C" void | extern "C" void | ||||||
| @@ -211,6 +213,7 @@ err (int eval, const char *fmt, ...) | |||||||
|   va_list ap; |   va_list ap; | ||||||
|   va_start (ap, fmt); |   va_start (ap, fmt); | ||||||
|   vwarn (fmt, ap); |   vwarn (fmt, ap); | ||||||
|  |   va_end (ap); | ||||||
|   exit (eval); |   exit (eval); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -220,6 +223,7 @@ errx (int eval, const char *fmt, ...) | |||||||
|   va_list ap; |   va_list ap; | ||||||
|   va_start (ap, fmt); |   va_start (ap, fmt); | ||||||
|   vwarnx (fmt, ap); |   vwarnx (fmt, ap); | ||||||
|  |   va_end (ap); | ||||||
|   exit (eval); |   exit (eval); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -584,8 +584,6 @@ _pinfo::commune_request (__uint32_t code, ...) | |||||||
|   HANDLE request_sync = NULL; |   HANDLE request_sync = NULL; | ||||||
|   bool locked = false; |   bool locked = false; | ||||||
|  |  | ||||||
|   va_start (args, code); |  | ||||||
|  |  | ||||||
|   res.s = NULL; |   res.s = NULL; | ||||||
|   res.n = 0; |   res.n = 0; | ||||||
|  |  | ||||||
| @@ -595,6 +593,7 @@ _pinfo::commune_request (__uint32_t code, ...) | |||||||
|       goto err; |       goto err; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |   va_start (args, code); | ||||||
|   si._si_commune._si_code = code; |   si._si_commune._si_code = code; | ||||||
|   switch (code) |   switch (code) | ||||||
|     { |     { | ||||||
| @@ -608,6 +607,7 @@ _pinfo::commune_request (__uint32_t code, ...) | |||||||
|  |  | ||||||
|     break; |     break; | ||||||
|     } |     } | ||||||
|  |   va_end (args); | ||||||
|  |  | ||||||
|   locked = true; |   locked = true; | ||||||
|   char name_buf[MAX_PATH]; |   char name_buf[MAX_PATH]; | ||||||
|   | |||||||
| @@ -274,6 +274,7 @@ strace::prntf (unsigned category, const char *func, const char *fmt, ...) | |||||||
|  |  | ||||||
|   va_start (ap, fmt); |   va_start (ap, fmt); | ||||||
|   vprntf (category, func, fmt, ap); |   vprntf (category, func, fmt, ap); | ||||||
|  |   va_end (ap); | ||||||
| } | } | ||||||
|  |  | ||||||
| extern "C" void | extern "C" void | ||||||
| @@ -285,6 +286,7 @@ strace_printf (unsigned category, const char *func, const char *fmt, ...) | |||||||
|     { |     { | ||||||
|       va_start (ap, fmt); |       va_start (ap, fmt); | ||||||
|       strace.vprntf (category, func, fmt, ap); |       strace.vprntf (category, func, fmt, ap); | ||||||
|  |       va_end (ap); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user