From 6d3dc414a3ee730c5f3188f17fee8261efbd4c00 Mon Sep 17 00:00:00 2001 From: Richard Frith-Macdonald Date: Thu, 8 Aug 2002 09:11:50 +0000 Subject: [PATCH] Ensure globally unique string is ok as a windoze filename (assuming that length constraints permit). git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@14248 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 6 ++++++ Source/NSProcessInfo.m | 33 ++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 536c5178c..a1cb2406b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2002-08-08 Richard Frith-Macdonald + + * Source/NSProcessInfo.m: ([-globallyUniqueString]) Ensure that the + string contains no dots, so it can be used as a filename under + windoze. + 2002-08-07 Richard Frith-Macdonald * Source/NSString.m: ([-boolValue]) Accept 'true' as well as 'YES' diff --git a/Source/NSProcessInfo.m b/Source/NSProcessInfo.m index a146fde64..0a826dcf2 100644 --- a/Source/NSProcessInfo.m +++ b/Source/NSProcessInfo.m @@ -591,31 +591,34 @@ int main(int argc, char *argv[], char *env[]) /** * Returns a string which may be used as a globally unique identifier.
* The string contains the host name, the process ID, a timestamp and a - * counter (to ensure that multiple strings generated within the same - * process are unique). + * counter.
+ * The first three values identify the process in which the string is + * generated, while the fourth ensures that multiple strings generated + * within the same process are unique. */ - (NSString *) globallyUniqueString { - static int pid = 0; - static int counter = 0; - int count; + static unsigned long counter = 0; + int count; + static NSString *host = nil; + static int pid; + static unsigned long start; - if (pid == 0) - { -#if defined(__MINGW__) - pid = (int)GetCurrentProcessId(); -#else - pid = (int)getpid(); -#endif - } [gnustep_global_lock lock]; + if (host == nil) + { + pid = [self processIdentifier]; + start = (unsigned long)GSTimeNow(); + host = [[self hostName] stringByReplacingString: @"." withString: @"_"]; + RETAIN(host); + } count = counter++; [gnustep_global_lock unlock]; // $$$ The format of the string is not specified by the OpenStep // specification. - return [NSString stringWithFormat: @"%@_%d_%lf_%d", - [self hostName], pid, GSTimeNow(), count]; + return [NSString stringWithFormat: @"%@_%x_%lx_%lx", + host, pid, start, count]; } /**