diff options
author | Theodore Ts'o <tytso@mit.edu> | 1999-10-26 02:50:36 +0000 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 1999-10-26 02:50:36 +0000 |
commit | 6c979d5c376a864f1216731dbe165237a923c5f7 (patch) | |
tree | 2bab97863fefd5cc11c54384d692cf34bc2da0a9 | |
parent | 00ab0435078fb0263075ea49144833033922c8a3 (diff) | |
download | e2fsprogs-6c979d5c376a864f1216731dbe165237a923c5f7.tar.gz |
ChangeLog, gen_uuid_nt.c:
gen_uuid_nt.c (uuid_generate): W2K strikes again! An incompatible
interface change means we need to detect whether the code is running
on an NT4 or NT5 system.
config.h, ChangeLog:
config.h: Add #define's for strcasecmp and strncasecmp
-rw-r--r-- | include/nonunix/ChangeLog | 3 | ||||
-rw-r--r-- | include/nonunix/config.h | 3 | ||||
-rw-r--r-- | lib/uuid/ChangeLog | 6 | ||||
-rw-r--r-- | lib/uuid/gen_uuid_nt.c | 81 |
4 files changed, 86 insertions, 7 deletions
diff --git a/include/nonunix/ChangeLog b/include/nonunix/ChangeLog new file mode 100644 index 00000000..6656a31f --- /dev/null +++ b/include/nonunix/ChangeLog @@ -0,0 +1,3 @@ +1999-10-25 <tytso@valinux.com> + + * config.h: Add #define's for strcasecmp and strncasecmp diff --git a/include/nonunix/config.h b/include/nonunix/config.h index cc8ac193..e269d20f 100644 --- a/include/nonunix/config.h +++ b/include/nonunix/config.h @@ -8,6 +8,9 @@ #define HAVE_SETJMP_H 1 #define HAVE_STRCASECMP 1 +#define strcasecmp _stricmp +#define strncasecmp _strnicmp + #define HAVE_CONIO_H 1 #define HAVE_EXT2_INODE_VERSION 1 diff --git a/lib/uuid/ChangeLog b/lib/uuid/ChangeLog index 3cedaf07..83abc89e 100644 --- a/lib/uuid/ChangeLog +++ b/lib/uuid/ChangeLog @@ -1,3 +1,9 @@ +1999-10-25 <tytso@valinux.com> + + * gen_uuid_nt.c (uuid_generate): W2K strikes again! An + incompatible interface change means we need to detect + whether the code is running on an NT4 or NT5 system. + 1999-10-22 <tytso@valinux.com> * Release of E2fsprogs 1.16 diff --git a/lib/uuid/gen_uuid_nt.c b/lib/uuid/gen_uuid_nt.c index 56aeecbc..aa44bfd3 100644 --- a/lib/uuid/gen_uuid_nt.c +++ b/lib/uuid/gen_uuid_nt.c @@ -1,16 +1,35 @@ - - -// -// Use NT api to generate uuid -// - +/* + * gen_uuid_nt.c -- Use NT api to generate uuid + * + * Written by Andrey Shedel (andreys@ns.cr.cyco.com) + */ #include "uuidP.h" +#pragma warning(push,4) #pragma comment(lib, "ntdll.lib") +// +// Here is a nice example why it's not a good idea +// to use native API in ordinary applications. +// Number of parameters in function below was changed from 3 to 4 +// for NT5. +// +// +// NTSYSAPI +// NTSTATUS +// NTAPI +// NtAllocateUuids( +// OUT PULONG p1, +// OUT PULONG p2, +// OUT PULONG p3, +// OUT PUCHAR Seed // 6 bytes +// ); +// +// + unsigned long __stdcall NtAllocateUuids( @@ -19,7 +38,55 @@ NtAllocateUuids( void* p3 // 4 bytes ); +typedef +unsigned long +(__stdcall* +NtAllocateUuids_2000)( + void* p1, // 8 bytes + void* p2, // 4 bytes + void* p3, // 4 bytes + void* seed // 6 bytes + ); + + + +// +// Nice, but instead of including ntddk.h ot winnt.h +// I should define it here because they MISSED __stdcall in those headers. +// + +__declspec(dllimport) +struct _TEB* +__stdcall +NtCurrentTeb(void); + + +// +// The only way to get version information from the system is to examine +// one stored in PEB. But it's pretty dangerouse because this value could +// be altered in image header. +// + +static +int +Nt5(void) +{ + //return NtCuttentTeb()->Peb->OSMajorVersion >= 5; + return (int)*(int*)((char*)(int)(*(int*)((char*)NtCurrentTeb() + 0x30)) + 0xA4) >= 5; +} + + + + void uuid_generate(uuid_t out) { - NtAllocateUuids(out, ((char*)out)+8, ((char*)out)+12 ); + if(Nt5()) + { + unsigned char seed[6]; + ((NtAllocateUuids_2000)NtAllocateUuids)(out, ((char*)out)+8, ((char*)out)+12, &seed[0] ); + } + else + { + NtAllocateUuids(out, ((char*)out)+8, ((char*)out)+12); + } } |