* exceptions.cc (open_stackdumpfile): Correctly append .stackdump

suffix.

	* nlsfuncs.cc (rebase_locale_buf): Reorder arguments.  Accommodate
	throughout.  Add pointer to end of buffer and avoid changing pointers
	not pointing into the buffer.
This commit is contained in:
Corinna Vinschen 2010-06-01 14:51:47 +00:00
parent 80a10a3972
commit ded1f66c2d
3 changed files with 25 additions and 17 deletions

View File

@ -1,3 +1,12 @@
2010-06-01 Corinna Vinschen <corinna@vinschen.de>
* exceptions.cc (open_stackdumpfile): Correctly append .stackdump
suffix.
* nlsfuncs.cc (rebase_locale_buf): Reorder arguments. Accommodate
throughout. Add pointer to end of buffer and avoid changing pointers
not pointing into the buffer.
2010-06-01 Corinna Vinschen <corinna@vinschen.de>
* fhandler_netdrive.cc (fhandler_netdrive::exists): Always free WNet

View File

@ -140,12 +140,11 @@ open_stackdumpfile ()
p = myself->progname;
WCHAR corefile[wcslen (p) + sizeof (".stackdump")];
wcscpy(corefile, p);
wcpcpy (wcpcpy(corefile, p), L".stackdump");
UNICODE_STRING ucore;
OBJECT_ATTRIBUTES attr;
/* Create the UNICODE variation of <progname>.stackdump. */
RtlInitUnicodeString (&ucore, corefile);
RtlAppendUnicodeToString (&ucore, L".stackdump");
/* Create an object attribute which refers to <progname>.stackdump
in Cygwin's cwd. Stick to caseinsensitivity. */
InitializeObjectAttributes (&attr, &ucore, OBJ_CASE_INSENSITIVE,

View File

@ -335,13 +335,13 @@ locale_cmp (const void *a, const void *b)
arrays. What we do here is just treat the lc_foo pointers as char ** and
rebase all char * pointers within, up to the given size of the structure. */
static void
rebase_locale_buf (const void *ptrv, const char *newbase, const char *oldbase,
const void *ptrvend)
rebase_locale_buf (const void *ptrv, const void *ptrvend, const char *newbase,
const char *oldbase, const char *oldend)
{
const char **ptrs = (const char **) ptrv;
const char **ptrsend = (const char **) ptrvend;
while (ptrs < ptrsend)
*ptrs++ += newbase - oldbase;
for (const char **ptrs = (const char **) ptrv; ptrs < ptrsend; ++ptrs)
if (*ptrs >= oldbase && *ptrs < oldend)
*ptrs += newbase - oldbase;
}
static wchar_t *
@ -686,8 +686,8 @@ __set_lc_time_from_win (const char *name,
else
{
if (tmp != new_lc_time_buf)
rebase_locale_buf (_time_locale, tmp, new_lc_time_buf,
_time_locale + 1);
rebase_locale_buf (_time_locale, _time_locale + 1, tmp,
new_lc_time_buf, lc_time_ptr);
lc_time_ptr = tmp + (lc_time_ptr - new_lc_time_buf);
new_lc_time_buf = tmp;
lc_time_end = new_lc_time_buf + len;
@ -748,8 +748,8 @@ __set_lc_time_from_win (const char *name,
return -1;
}
if (tmp != new_lc_time_buf)
rebase_locale_buf (_time_locale, tmp, new_lc_time_buf,
_time_locale + 1);
rebase_locale_buf (_time_locale, _time_locale + 1, tmp,
new_lc_time_buf, lc_time_ptr);
if (*lc_time_buf)
free (*lc_time_buf);
*lc_time_buf = tmp;
@ -823,8 +823,8 @@ __set_lc_ctype_from_win (const char *name,
return -1;
}
if (tmp != new_lc_ctype_buf)
rebase_locale_buf (_ctype_locale, tmp, new_lc_ctype_buf,
_ctype_locale + 1);
rebase_locale_buf (_ctype_locale, _ctype_locale + 1, tmp,
new_lc_ctype_buf, lc_ctype_ptr);
if (*lc_ctype_buf)
free (*lc_ctype_buf);
*lc_ctype_buf = tmp;
@ -883,8 +883,8 @@ __set_lc_numeric_from_win (const char *name,
return -1;
}
if (tmp != new_lc_numeric_buf)
rebase_locale_buf (_numeric_locale, tmp, new_lc_numeric_buf,
_numeric_locale + 1);
rebase_locale_buf (_numeric_locale, _numeric_locale + 1, tmp,
new_lc_numeric_buf, lc_numeric_ptr);
if (*lc_numeric_buf)
free (*lc_numeric_buf);
*lc_numeric_buf = tmp;
@ -1010,8 +1010,8 @@ __set_lc_monetary_from_win (const char *name,
return -1;
}
if (tmp != new_lc_monetary_buf)
rebase_locale_buf (_monetary_locale, tmp, new_lc_monetary_buf,
_monetary_locale + 1);
rebase_locale_buf (_monetary_locale, _monetary_locale + 1, tmp,
new_lc_monetary_buf, lc_monetary_ptr);
if (*lc_monetary_buf)
free (*lc_monetary_buf);
*lc_monetary_buf = tmp;