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>
* 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, ...)
{
va_list arg;
unsigned long res = -1;
va_start (arg, t);
switch (t)
{
case CW_LOCK_PINFO:
return 1;
res = 1;
break;
case CW_UNLOCK_PINFO:
return 1;
res = 1;
break;
case CW_GETTHREADNAME:
return (DWORD) cygthread::name (va_arg (arg, DWORD));
res = (DWORD) cygthread::name (va_arg (arg, DWORD));
break;
case CW_SETTHREADNAME:
{
set_errno (ENOSYS);
return 0;
res = 0;
}
break;
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:
return (DWORD) cygwin_version_strings;
res = (DWORD) cygwin_version_strings;
break;
case CW_READ_V1_MOUNT_TABLES:
set_errno (ENOSYS);
return 1;
res = 1;
break;
case CW_USER_DATA:
/* 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
is forking. */
__cygwin_user_data.cxx_malloc = &default_cygwin_cxx_malloc;
return (DWORD) &__cygwin_user_data;
res = (DWORD) &__cygwin_user_data;
break;
case CW_PERFILE:
perfile_table = va_arg (arg, struct __cygwin_perfile *);
return 0;
res = 0;
break;
case CW_GET_CYGDRIVE_PREFIXES:
{
char *user = 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:
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:
/* noop */ /* init_exceptions (va_arg (arg, exception_list *)); */
return 0;
res = 0;
break;
case CW_GET_CYGDRIVE_INFO:
{
@ -258,12 +271,14 @@ cygwin_internal (cygwin_getinfo_types t, ...)
char *system = va_arg (arg, char *);
char *user_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_GET_CYGWIN_REGISTRY_NAME:
return 0;
res = 0;
break;
case CW_STRACE_TOGGLE:
{
@ -272,25 +287,28 @@ cygwin_internal (cygwin_getinfo_types t, ...)
if (p)
{
sig_send (p, __SIGSTRACE);
return 0;
res = 0;
}
else
{
set_errno (ESRCH);
return (DWORD) -1;
res = (DWORD) -1;
}
}
break;
case CW_STRACE_ACTIVE:
{
return strace.active ();
res = strace.active ();
}
break;
case CW_CYGWIN_PID_TO_WINPID:
{
pinfo p (va_arg (arg, pid_t));
return p ? p->dwProcessId : 0;
res = p ? p->dwProcessId : 0;
}
break;
case CW_EXTRACT_DOMAIN_AND_USER:
{
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);
if (user)
sys_wcstombs (user, UNLEN + 1, nt_user);
return 0;
res = 0;
}
break;
case CW_CMDLINE:
{
size_t n;
pid_t pid = va_arg (arg, pid_t);
pinfo p (pid);
return (DWORD) p->cmdline (n);
res = (DWORD) p->cmdline (n);
}
break;
case CW_CHECK_NTSEC:
{
char *filename = va_arg (arg, char *);
return check_ntsec (filename);
res = check_ntsec (filename);
}
break;
case CW_GET_ERRNO_FROM_WINERROR:
{
int error = 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:
{
path_conv dummy;
@ -334,24 +356,31 @@ cygwin_internal (cygwin_getinfo_types t, ...)
DWORD sd_buf_size = va_arg (arg, DWORD);
set_security_attribute (dummy, attribute, psa, sd);
if (!psa->lpSecurityDescriptor)
return sd.size ();
psa->lpSecurityDescriptor = sd_buf;
return sd.copy (sd_buf, sd_buf_size);
res = sd.size ();
else
{
psa->lpSecurityDescriptor = sd_buf;
res = sd.copy (sd_buf, sd_buf_size);
}
}
break;
case CW_GET_SHMLBA:
{
return getpagesize ();
res = getpagesize ();
}
break;
case CW_GET_UID_FROM_SID:
{
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:
{
cygpsid psid = va_arg (arg, PSID);
return psid.get_id (true, NULL);
res = psid.get_id (true, NULL);
}
break;
case CW_GET_BINMODE:
{
const char *path = va_arg (arg, const char *);
@ -359,54 +388,62 @@ cygwin_internal (cygwin_getinfo_types t, ...)
if (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:
{
const char *name = va_arg (arg, const char *);
const void *hookfn = va_arg (arg, const void *);
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:
{
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:
{
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:
error_start_init (va_arg (arg, const char *));
try_to_debug ();
break;
case CW_SYNC_WINENV:
sync_winenv ();
return 0;
res = 0;
break;
case CW_CYGTLS_PADSIZE:
return CYGTLS_PADSIZE;
res = CYGTLS_PADSIZE;
break;
case CW_SET_DOS_FILE_WARNING:
{
extern bool dos_file_warning;
dos_file_warning = va_arg (arg, int);
return 0;
res = 0;
}
break;
case CW_SET_PRIV_KEY:
{
const char *passwd = va_arg (arg, const char *);
return setlsapwd (passwd);
res = setlsapwd (passwd);
}
break;
case CW_SETERRNO:
{
const char *file = va_arg (arg, const char *);
int line = va_arg (arg, int);
seterrno(file, line);
return 0;
res = 0;
}
break;
case CW_EXIT_PROCESS:
@ -420,12 +457,13 @@ cygwin_internal (cygwin_getinfo_types t, ...)
HANDLE token = va_arg (arg, HANDLE);
int type = va_arg (arg, int);
set_imp_token (token, type);
return 0;
res = 0;
}
break;
default:
break;
set_errno (ENOSYS);
}
set_errno (ENOSYS);
return (unsigned long) -1;
va_end (arg);
return res;
}

View File

@ -758,10 +758,12 @@ child_copy (HANDLE hp, bool write, ...)
}
}
va_end (args);
debug_printf ("done");
return true;
err:
va_end (args);
TerminateProcess (hp, 1);
set_errno (EAGAIN);
return false;

View File

@ -181,6 +181,7 @@ warn (const char *fmt, ...)
va_list ap;
va_start (ap, fmt);
vwarn (fmt, ap);
va_end (ap);
}
extern "C" void
@ -189,6 +190,7 @@ warnx (const char *fmt, ...)
va_list ap;
va_start (ap, fmt);
vwarnx (fmt, ap);
va_end (ap);
}
extern "C" void
@ -211,6 +213,7 @@ err (int eval, const char *fmt, ...)
va_list ap;
va_start (ap, fmt);
vwarn (fmt, ap);
va_end (ap);
exit (eval);
}
@ -220,6 +223,7 @@ errx (int eval, const char *fmt, ...)
va_list ap;
va_start (ap, fmt);
vwarnx (fmt, ap);
va_end (ap);
exit (eval);
}

View File

@ -584,8 +584,6 @@ _pinfo::commune_request (__uint32_t code, ...)
HANDLE request_sync = NULL;
bool locked = false;
va_start (args, code);
res.s = NULL;
res.n = 0;
@ -595,6 +593,7 @@ _pinfo::commune_request (__uint32_t code, ...)
goto err;
}
va_start (args, code);
si._si_commune._si_code = code;
switch (code)
{
@ -608,6 +607,7 @@ _pinfo::commune_request (__uint32_t code, ...)
break;
}
va_end (args);
locked = true;
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);
vprntf (category, func, fmt, ap);
va_end (ap);
}
extern "C" void
@ -285,6 +286,7 @@ strace_printf (unsigned category, const char *func, const char *fmt, ...)
{
va_start (ap, fmt);
strace.vprntf (category, func, fmt, ap);
va_end (ap);
}
}