Fixed a buffer overflow caused by our R5 select() emulation.
Added missing uname() function which is needed for full R5 compatibility. It seems that nearly all apps are working now. I could finally run Vision (BONE and R5), BeShare (quick test only), lynx, Net+, etc. Apps that don't work: Mozilla for BONE, some ssh binary that I downloaded, Be's ftp when not in passive mode. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9098 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -142,3 +142,23 @@ _EXPORT int getpassword(char * pwd, size_t length)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct utsname {
|
||||||
|
char sysname[32];
|
||||||
|
char nodename[32];
|
||||||
|
char release[32];
|
||||||
|
char version[32];
|
||||||
|
char machine[32];
|
||||||
|
};
|
||||||
|
int uname(struct utsname *name);
|
||||||
|
_EXPORT int uname(struct utsname *name)
|
||||||
|
{
|
||||||
|
if(!name)
|
||||||
|
return B_ERROR;
|
||||||
|
|
||||||
|
strcpy(name->sysname, "BeOS");
|
||||||
|
strcpy(name->nodename, "trantor");
|
||||||
|
strcpy(name->release, "5.0");
|
||||||
|
strcpy(name->version, "1000009");
|
||||||
|
strcpy(name->machine, "BePC");
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|||||||
@@ -146,16 +146,17 @@ _EXPORT int select(int nbits, struct fd_set * rbits,
|
|||||||
case B_WOULD_BLOCK:
|
case B_WOULD_BLOCK:
|
||||||
case B_TIMED_OUT: // logicly, 'n' should stay to 0 in this case...
|
case B_TIMED_OUT: // logicly, 'n' should stay to 0 in this case...
|
||||||
n = 0;
|
n = 0;
|
||||||
|
// IMPORTANT: memcpy uses the old R5 fd_bits size (sizeof(unsigned) * 8)!
|
||||||
if (rbits) {
|
if (rbits) {
|
||||||
memcpy(rbits, &rss->rbits, sizeof(*rbits));
|
memcpy(rbits, &rss->rbits, sizeof(unsigned) * 8);
|
||||||
n += fd_set_count(rbits, nbits);
|
n += fd_set_count(rbits, nbits);
|
||||||
};
|
};
|
||||||
if (wbits) {
|
if (wbits) {
|
||||||
memcpy(wbits, &rss->wbits, sizeof(*wbits));
|
memcpy(wbits, &rss->wbits, sizeof(unsigned) * 8);
|
||||||
n += fd_set_count(wbits, nbits);
|
n += fd_set_count(wbits, nbits);
|
||||||
};
|
};
|
||||||
if (ebits) {
|
if (ebits) {
|
||||||
memcpy(ebits, &rss->ebits, sizeof(*ebits));
|
memcpy(ebits, &rss->ebits, sizeof(unsigned) * 8);
|
||||||
n += fd_set_count(ebits, nbits);
|
n += fd_set_count(ebits, nbits);
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user