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:
Eric Blake 2009-10-14 04:17:05 +00:00
parent e4ba1cf29e
commit 4cd31fc8f9
6 changed files with 98 additions and 44 deletions

View File

@ -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.

View File

@ -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;
} }

View File

@ -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;

View File

@ -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);
} }

View File

@ -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];

View File

@ -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);
} }
} }