mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.3 KiB
124 lines
3.3 KiB
/*
|
|
|
|
$Log: S:\oiwh\libgfs\mktemp.c_v $
|
|
*
|
|
* Rev 1.2 10 Jul 1995 16:06:00 KENDRAK
|
|
* Fixed getpid(), which was #defined as (int) 1, to call GetCurrentProcessId.
|
|
*
|
|
* Rev 1.1 19 Apr 1995 16:34:40 RWR
|
|
* Make sure WIN32_LEAN_AND_MEAN is defined (explicitly or via GFSINTRN.H)
|
|
* Also surround local include files with quotes instead of angle brackets
|
|
*
|
|
* Rev 1.0 06 Apr 1995 14:02:20 HEIDI
|
|
* Initial entry
|
|
*
|
|
* Rev 1.0 28 Mar 1995 15:41:40 JAR
|
|
* Initial entry
|
|
|
|
*/
|
|
|
|
/*
|
|
Copyright 1990 by Wang Laboratories Inc.
|
|
|
|
Permission to use, copy, modify, and distribute this
|
|
software and its documentation for any purpose and without
|
|
fee is hereby granted, provided that the above copyright
|
|
notice appear in all copies and that both that copyright
|
|
notice and this permission notice appear in supporting
|
|
documentation, and that the name of WANG not be used in
|
|
advertising or publicity pertaining to distribution of the
|
|
software without specific, written prior permission.
|
|
WANG makes no representations about the suitability of
|
|
this software for any purpose. It is provided "as is"
|
|
without express or implied warranty.
|
|
*
|
|
* SccsId: @(#)Source mktemp.c 1.5@(#)
|
|
*
|
|
* mktemp(2)
|
|
*
|
|
* ODC: [ Generate unique temporary file name ]
|
|
*
|
|
* SYNOPSIS:
|
|
* char *mktemp(as)
|
|
* char *as;
|
|
*
|
|
* UPDATE HISTORY:
|
|
* 10/02/90 - wfa, creation
|
|
*
|
|
*/
|
|
|
|
/*LINTLIBRARY*/
|
|
#define ODC_CORE
|
|
|
|
/* Note: Both access() and getpid() are OS specific. See related files
|
|
in odc/??/access.s and odc/??/getpid.s for OS specific functions. */
|
|
|
|
#ifdef MSWINDOWS
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#include <windows.h>
|
|
//kjk 07/10/95 Changed this definition from (int) 1 to function call
|
|
#define getpid() GetCurrentProcessId()
|
|
|
|
#ifdef PEGASUS
|
|
int pegasus_access (char FAR *, int);
|
|
#define access pegasus_access
|
|
#else
|
|
/* 9503.23 JAR changed gaccess to g95access for windows 95 */
|
|
/* #define access gaccess */
|
|
#define access g95access
|
|
#endif
|
|
|
|
#define strlen lstrlen
|
|
#else
|
|
#define FAR
|
|
extern unsigned int strlen(), access();
|
|
#endif
|
|
#ifdef NOVELL
|
|
#define getpid() (int) 1
|
|
#endif
|
|
#ifndef MSWINDOWS
|
|
#ifndef NOVELL
|
|
extern int getpid();
|
|
#endif
|
|
#endif
|
|
|
|
/*
|
|
* Create a temporary filename
|
|
*
|
|
* Arguments:
|
|
* *as - pointer to a string of at least 6 characters with
|
|
* six trailing 'X's.
|
|
*
|
|
* Returns pointer to same string overlaid with a letter and the
|
|
* last five digits of the process id. If every letter (a thru z)
|
|
* thus inserted leads to an existing filename, the string will be
|
|
* shortened to length zero (first character == '\0') on return.
|
|
*
|
|
*/
|
|
|
|
char FAR *mktemp(as)
|
|
char FAR *as;
|
|
{
|
|
register char FAR *s = as;
|
|
register unsigned int pid;
|
|
|
|
pid = getpid();
|
|
s += strlen(as); /* point at the terminal null */
|
|
while (*--s == 'X')
|
|
{
|
|
*s = (pid % 10) + '0';
|
|
pid /= 10;
|
|
}
|
|
if (*++s) { /* maybe there were no 'X's */
|
|
*s = 'a';
|
|
while (access(as, 0) == 0) {
|
|
if (++ * s > 'z') {
|
|
*as = '\0';
|
|
break;
|
|
}
|
|
}
|
|
} else if (access(as, 0) == 0)
|
|
*as = '\0';
|
|
|
|
return(as);
|
|
}
|