(strcasecmp): Conform to ANSI specs for toupper.
(strncasecmp): Ditto. Also do not use side-effects in macro args. (wine_openpty): Plug descriptor leak. Always set errno on failure. (wine_anon_mmap): Fix comment location.
This commit is contained in:
parent
87093f5386
commit
a2d11df25b
|
@ -164,8 +164,14 @@ int clone( int (*fn)(void *), void *stack, int flags, void *arg )
|
||||||
#ifndef HAVE_STRCASECMP
|
#ifndef HAVE_STRCASECMP
|
||||||
int strcasecmp( const char *str1, const char *str2 )
|
int strcasecmp( const char *str1, const char *str2 )
|
||||||
{
|
{
|
||||||
while (*str1 && toupper(*str1) == toupper(*str2)) { str1++; str2++; }
|
const unsigned char *ustr1 = (const unsigned char *)str1;
|
||||||
return toupper(*str1) - toupper(*str2);
|
const unsigned char *ustr2 = (const unsigned char *)str2;
|
||||||
|
|
||||||
|
while (*ustr1 && toupper(*ustr1) == toupper(*ustr2)) {
|
||||||
|
ustr1++;
|
||||||
|
ustr2++;
|
||||||
|
}
|
||||||
|
return toupper(*ustr1) - toupper(*ustr2);
|
||||||
}
|
}
|
||||||
#endif /* HAVE_STRCASECMP */
|
#endif /* HAVE_STRCASECMP */
|
||||||
|
|
||||||
|
@ -175,11 +181,17 @@ int strcasecmp( const char *str1, const char *str2 )
|
||||||
#ifndef HAVE_STRNCASECMP
|
#ifndef HAVE_STRNCASECMP
|
||||||
int strncasecmp( const char *str1, const char *str2, size_t n )
|
int strncasecmp( const char *str1, const char *str2, size_t n )
|
||||||
{
|
{
|
||||||
|
const unsigned char *ustr1 = (const unsigned char *)str1;
|
||||||
|
const unsigned char *ustr2 = (const unsigned char *)str2;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
if (!n) return 0;
|
if (!n) return 0;
|
||||||
while ((--n > 0) && *str1)
|
while ((--n > 0) && *ustr1) {
|
||||||
if ((res = toupper(*str1++) - toupper(*str2++))) return res;
|
if ((res = toupper(*ustr1) - toupper(*ustr2))) return res;
|
||||||
return toupper(*str1) - toupper(*str2);
|
ustr1++;
|
||||||
|
ustr2++;
|
||||||
|
}
|
||||||
|
return toupper(*ustr1) - toupper(*ustr2);
|
||||||
}
|
}
|
||||||
#endif /* HAVE_STRNCASECMP */
|
#endif /* HAVE_STRNCASECMP */
|
||||||
|
|
||||||
|
@ -197,9 +209,9 @@ int wine_openpty(int *master, int *slave, char *name,
|
||||||
struct termios *term, struct winsize *winsize)
|
struct termios *term, struct winsize *winsize)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_OPENPTY
|
#ifdef HAVE_OPENPTY
|
||||||
return openpty(master,slave,name,term,winsize);
|
return openpty(master, slave, name, term, winsize);
|
||||||
#else
|
#else
|
||||||
char *ptr1, *ptr2;
|
const char *ptr1, *ptr2;
|
||||||
char pts_name[512];
|
char pts_name[512];
|
||||||
|
|
||||||
strcpy (pts_name, "/dev/ptyXY");
|
strcpy (pts_name, "/dev/ptyXY");
|
||||||
|
@ -218,6 +230,7 @@ int wine_openpty(int *master, int *slave, char *name,
|
||||||
pts_name[5] = 't';
|
pts_name[5] = 't';
|
||||||
if ((*slave = open(pts_name, O_RDWR)) < 0) {
|
if ((*slave = open(pts_name, O_RDWR)) < 0) {
|
||||||
pts_name[5] = 'p';
|
pts_name[5] = 'p';
|
||||||
|
close (*master);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,6 +243,7 @@ int wine_openpty(int *master, int *slave, char *name,
|
||||||
return *slave;
|
return *slave;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
errno = EMFILE;
|
||||||
return -1;
|
return -1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -405,13 +419,16 @@ void *wine_anon_mmap( void *start, size_t size, int prot, int flags )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* MAP_ANON */
|
#endif /* MAP_ANON */
|
||||||
/* Linux EINVAL's on us if we don't pass MAP_PRIVATE to an anon mmap */
|
|
||||||
#ifdef MAP_SHARED
|
#ifdef MAP_SHARED
|
||||||
flags &= ~MAP_SHARED;
|
flags &= ~MAP_SHARED;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Linux EINVAL's on us if we don't pass MAP_PRIVATE to an anon mmap */
|
||||||
#ifdef MAP_PRIVATE
|
#ifdef MAP_PRIVATE
|
||||||
flags |= MAP_PRIVATE;
|
flags |= MAP_PRIVATE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return mmap( start, size, prot, flags, fdzero, 0 );
|
return mmap( start, size, prot, flags, fdzero, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue