tempnam.c

来自「操作系统SunOS 4.1.3版本的源码」· C语言 代码 · 共 75 行

C
75
字号
#if !defined(lint) && defined(SCCSIDS)static	char sccsid[] = "@(#)tempnam.c 1.1 92/07/30 SMI"; /* from S5R2 1.1 */#endif/*LINTLIBRARY*/#include <stdio.h>#include <string.h>#define max(A,B) (((A)<(B))?(B):(A))extern char *malloc(), *getenv(), *mktemp();extern int access();static char *pcopy();static char seed[3];char *tempnam(dir, pfx)char *dir;		/* use this directory please (if non-NULL) */char *pfx;		/* use this (if non-NULL) as filename prefix */{	register char *p, *q, *tdir;	int x=0, y=0, z;	if (seed[0] == 0)		seed[0] = seed[1] = seed[2] = 'A';	z=strlen(P_tmpdir);	if((tdir = getenv("TMPDIR")) != NULL) {		x = strlen(tdir);	}	if(dir != NULL) {		y=strlen(dir);	}	if((p=malloc((unsigned)(max(max(x,y),z)+16))) == NULL)		return(NULL);	if(x > 0 && access(pcopy(p, tdir), 3) == 0)		goto OK;	if(y > 0 && access(pcopy(p, dir), 3) == 0)		goto OK;	if(access(pcopy(p, P_tmpdir), 3) == 0)		goto OK;	if(access(pcopy(p, "/tmp"), 3) != 0)		return(NULL);OK:	(void)strcat(p, "/");	if(pfx) {		*(p+strlen(p)+5) = '\0';		(void)strncat(p, pfx, 5);	}	(void)strcat(p, seed);	(void)strcat(p, "XXXXXX");	q = seed;	while(*q == 'Z')		*q++ = 'A';	++*q;	if(*mktemp(p) == '\0')		return(NULL);	return(p);}static char*pcopy(space, arg)char *space, *arg;{	char *p;	if(arg) {		(void)strcpy(space, arg);		p = space-1+strlen(space);		if(*p == '/')			*p = '\0';	}	return(space);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?