file_print.c

来自「ftam等标准协议服务器和客户端的源代码。」· C语言 代码 · 共 293 行

C
293
字号
#ifndef lintstatic char *rcsid = "$Header: /xtel/isode/isode/dsap/common/RCS/file_print.c,v 9.0 1992/06/16 12:12:39 isode Rel $";#endif/* * $Header: /xtel/isode/isode/dsap/common/RCS/file_print.c,v 9.0 1992/06/16 12:12:39 isode Rel $ * * * $Log: file_print.c,v $ * Revision 9.0  1992/06/16  12:12:39  isode * Release 8.0 * *//* *                                NOTICE * *    Acquisition, use, and distribution of this module and related *    materials are subject to the restrictions of a license agreement. *    Consult the Preface in the User's Manual for the full terms of *    this agreement. * */#include "quipu/util.h"#include "quipu/attrvalue.h"#include "quipu/malloc.h"char * parse_file = NULLCP;RDN parse_rdn = NULLRDN;extern LLog * log_dsap;extern AttributeType last_at;extern int avs_count;extern char dsa_mode;static char used_temp;#ifndef SYS5/* ARGSUSED */#endifint dflt_attr_file (at,x,full)AttributeType  at;AttributeValue x;char full;{	/* make default file name */char buffer [LINESIZE];PS sps;char *pathend = NULLCP;char val, *_isodefile();char *path = NULLCP;struct file_syntax * fs;unsigned last_heap;int save_count;	used_temp = FALSE;	fs = (struct file_syntax *) x->av_struct;	if ((parse_file != NULLCP) && ((pathend = rindex (parse_file,'/')) != NULLCP)) {		val = *++pathend;		*pathend = 0;		path = parse_file;	}	last_heap = mem_heap;	/* put PS on general heap */	mem_heap = 0;	bzero (buffer,LINESIZE);	sps = ps_alloc (str_open);	if (str_setup (sps,buffer,LINESIZE,1) == NOTOK) {		mem_heap = last_heap;		ps_free (sps);		return (NOTOK);	}	mem_heap = last_heap;	if (parse_rdn == NULLRDN) {		ps_printf (sps,"/tmp/%s_XXXXXX",at->oa_ot.ot_name);		used_temp = TRUE;		fs->fs_name = mktemp(strdup (buffer));		if (pathend != NULLCP)			*pathend = val;		return (OK);	} else {		save_count = avs_count;		rdn_print (sps,parse_rdn,EDBOUT);		if ((avs_count = save_count) > 1) {			ps_printf (sps,".%d.%s",avs_count,at->oa_ot.ot_name);			used_temp = TRUE;		} else			ps_printf (sps,".%s",at->oa_ot.ot_name);	}	*sps->ps_ptr = 0;	ps_free (sps);#if	defined(SYS5) && !defined(SVR4)	   if ((full) && ((int)strlen(buffer) > MAXFILENAMELEN)) {		char *nptr, *mptr;		char nbuf [LINESIZE];		int i;		nptr = buffer;		mptr = nbuf;				used_temp = TRUE;		for (i=0 ; (*nptr!=0) && (i < MAXFILENAMELEN-6) ; nptr++)			if (isalpha(*nptr))				*mptr++ = *nptr, i++;		(void) strcpy (mptr,"XXXXXX");		if (path != NULLCP)			fs->fs_name = mktemp(strdup (_isodefile(path,nbuf)));		else			fs->fs_name = mktemp(strdup (nbuf));		if (pathend != NULLCP)			*pathend = val;		fs->fs_mode = 0;		return (OK);	} #endif	if (path != NULLCP)		fs->fs_name = strdup (_isodefile(path,buffer));	else		fs->fs_name = strdup (buffer);	if (pathend != NULLCP)		*pathend = val;	return (OK);}fileattr_print (ps,y,format)PS ps;AttributeValue y;int format;{struct file_syntax * fs;int um;AttributeType save_at;	fs = (struct file_syntax *) y->av_struct;	if (format != EDBOUT) {		if (fs->fs_attr) 			AttrV_print (ps,fs->fs_attr,format);		else 			ps_print (ps,"Internal error, need to load the file!!!");	} else {		FILE * fptr;		PS fps;		ps_print (ps,"{FILE}");		if (fs->fs_name == NULLCP) {			save_at = last_at;			if (dflt_attr_file (last_at,y,0) == NOTOK) {				LLOG (log_dsap,LLOG_EXCEPTIONS,("Could not make default attribute file"));				last_at = save_at;				return;			}			last_at = save_at;			if (used_temp) {				ps_print (ps,fs->fs_name);				fs->fs_mode &= ~FS_DEFAULT;			}		} else if (! (fs->fs_mode & FS_DEFAULT))			ps_print (ps,fs->fs_name);		if (fs->fs_attr == NULLAttrV)				/* already exists */			return;		if (fs->fs_mode & FS_CREATE)	/* already written */			return;		        um = umask (0177);		if ((fptr = fopen (fs->fs_name,"w")) != NULL) {		        (void) umask (um);			if ((fps = ps_alloc (std_open)) == NULLPS) {				(void) fclose (fptr);				LLOG (log_dsap,LLOG_EXCEPTIONS,("Could not alloc PS file '%s'",fs->fs_name));				return;			}							if ((std_setup (fps,fptr)) == NOTOK) {				(void) fclose (fptr);				ps_free (fps);				LLOG (log_dsap,LLOG_EXCEPTIONS,("Could not open PS file '%s'",fs->fs_name));				return;			}		} else {		        (void) umask (um);			LLOG ( log_dsap,LLOG_EXCEPTIONS,("Could not open attribute file '%s'",fs->fs_name));			return;		}		AttrV_print (fps,fs->fs_attr,FILEOUT);		if (dsa_mode) {			AttrV_free (fs->fs_attr);			fs->fs_attr = NULLAttrV;		}		(void) fclose (fptr);		ps_free (fps);		fs->fs_mode |= FS_CREATE;		DLOG (log_dsap,LLOG_DEBUG,("Written photo file '%s'",fs->fs_name));	}	return;}void as_write_files (as,where)Attr_Sequence as;char *where;{struct file_syntax * fs;int um;AV_Sequence avs;FILE * fptr;PS fps;char buffer[LINESIZE];static unsigned long loopcount = 0;	for ( ; as != NULLATTR; as = as -> attr_link ) 	  for ( avs = as -> attr_value ; avs != NULLAV ; 		  avs = avs -> avseq_next )	    if ( avs -> avseq_av.av_syntax == AV_FILE ) {		fs = (struct file_syntax *) avs->avseq_av.av_struct;		if (fs->fs_name != NULLCP || fs->fs_attr == NULLAttrV)		        continue ;		(void) sprintf (buffer,"%s%D_%s",where,loopcount++,				as -> attr_type -> oa_ot.ot_name);		fs->fs_name = strdup(buffer);	        um = umask (0177);		if ((fptr = fopen (fs->fs_name,"w")) != NULL) {		        (void) umask (um);			if ((fps = ps_alloc (std_open)) == NULLPS) {				(void) fclose (fptr);				LLOG (log_dsap,LLOG_EXCEPTIONS,				      ("Could not alloc PS file (tmp) '%s'",				       fs->fs_name));				free (fs->fs_name);				fs->fs_name = NULLCP;				return;			}							if ((std_setup (fps,fptr)) == NOTOK) {				(void) fclose (fptr);				ps_free (fps);				LLOG (log_dsap,LLOG_EXCEPTIONS,				      ("Could not open PS file (tmp2) '%s'",				       fs->fs_name));				free (fs->fs_name);				fs->fs_name = NULLCP;				return;			}		} else {		        (void) umask (um);			LLOG ( log_dsap,LLOG_EXCEPTIONS,			      ("Could not open attribute file (tmp) '%s'",			       fs->fs_name));			return;		}		AttrV_print (fps,fs->fs_attr,FILEOUT);		fs->fs_mode &= ~FS_DEFAULT;		fs->fs_mode |= FS_CREATE;		fs->fs_mode |= FS_TMP;		AttrV_free (fs->fs_attr);		fs->fs_attr = NULLAttrV;		(void) fclose (fptr);		ps_free (fps);		DLOG (log_dsap,LLOG_DEBUG,		      ("Written photo file (tmp) '%s'",fs->fs_name));	    }}

⌨️ 快捷键说明

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