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
This commit is contained in:
CaS 2002-08-08 09:11:50 +00:00
parent d9b2c57fa3
commit bde22bbc6f
2 changed files with 24 additions and 15 deletions

View file

@ -1,3 +1,9 @@
2002-08-08 Richard Frith-Macdonald <rfm@gnu.org>
* 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 <rfm@gnu.org> 2002-08-07 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSString.m: ([-boolValue]) Accept 'true' as well as 'YES' * Source/NSString.m: ([-boolValue]) Accept 'true' as well as 'YES'

View file

@ -591,31 +591,34 @@ int main(int argc, char *argv[], char *env[])
/** /**
* Returns a string which may be used as a globally unique identifier.<br /> * Returns a string which may be used as a globally unique identifier.<br />
* The string contains the host name, the process ID, a timestamp and a * The string contains the host name, the process ID, a timestamp and a
* counter (to ensure that multiple strings generated within the same * counter.<br />
* process are unique). * 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 - (NSString *) globallyUniqueString
{ {
static int pid = 0; static unsigned long counter = 0;
static int counter = 0; int count;
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]; [gnustep_global_lock lock];
if (host == nil)
{
pid = [self processIdentifier];
start = (unsigned long)GSTimeNow();
host = [[self hostName] stringByReplacingString: @"." withString: @"_"];
RETAIN(host);
}
count = counter++; count = counter++;
[gnustep_global_lock unlock]; [gnustep_global_lock unlock];
// $$$ The format of the string is not specified by the OpenStep // $$$ The format of the string is not specified by the OpenStep
// specification. // specification.
return [NSString stringWithFormat: @"%@_%d_%lf_%d", return [NSString stringWithFormat: @"%@_%x_%lx_%lx",
[self hostName], pid, GSTimeNow(), count]; host, pid, start, count];
} }
/** /**