Commit a2d11df2 authored by Morten Welinder's avatar Morten Welinder Committed by Alexandre Julliard

(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.
parent 87093f53
...@@ -164,8 +164,14 @@ int clone( int (*fn)(void *), void *stack, int flags, void *arg ) ...@@ -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 ) ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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 ) ...@@ -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 );
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment