|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T f
Length: 3183 (0xc6f)
Types: TextFile
Names: »file_print.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z«
└─⟦de7628f85⟧
└─⟦this⟧ »isode-6.0/dsap/common/file_print.c«
#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;
#ifndef SYS5
/* ARGSUSED */
#endif
int 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;
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;
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_print (sps,at->at_table->oa_ot.ot_name);
else {
rdn_print (sps,parse_rdn,EDBOUT);
ps_printf (sps,".%s",at->at_table->oa_ot.ot_name);
}
*sps->ps_ptr = 0;
ps_free (sps);
#ifdef SYS5
if ((full) && (strlen(buffer) > MAXFILENAMELEN)) {
char *nptr, *mptr;
char nbuf [LINESIZE];
int i;
nptr = buffer;
mptr = nbuf;
for (i=0 ; (*nptr!=0) && (i < MAXFILENAMELEN-6) ; nptr++)
if (isalpha(*nptr))
*mptr++ = *nptr, i++;
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;
fs = (struct file_syntax *) y->av_struct;
if (format != EDBOUT)
AttrV_print (ps,fs->fs_attr,format);
else {
FILE * fptr;
PS fps;
ps_print (ps,"{FILE}");
if (fs->fs_name == NULLCP) {
if (dflt_attr_file (last_at,y,0) == NOTOK) {
LLOG (log_dsap,LLOG_EXCEPTIONS,("Could not make default attribute file"));
return;
}
} 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);
(void) fclose (fptr);
ps_free (fps);
fs->fs_mode |= FS_CREATE;
}
return;
}