|
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; }