|
|
1.1 ! root 1: #include "quipu/util.h" ! 2: #include "quipu/attrvalue.h" ! 3: #include "quipu/malloc.h" ! 4: ! 5: char * parse_file = NULLCP; ! 6: RDN parse_rdn = NULLRDN; ! 7: extern LLog * log_dsap; ! 8: extern AttributeType last_at; ! 9: ! 10: #ifdef SYS5 ! 11: static char used_temp; ! 12: #else ! 13: /* ARGSUSED */ ! 14: #endif ! 15: ! 16: int dflt_attr_file (at,x,full) ! 17: AttributeType at; ! 18: AttributeValue x; ! 19: char full; ! 20: { ! 21: /* make default file name */ ! 22: char buffer [LINESIZE]; ! 23: PS sps; ! 24: char *pathend = NULLCP; ! 25: char val, *_isodefile(); ! 26: char *path = NULLCP; ! 27: struct file_syntax * fs; ! 28: unsigned last_heap; ! 29: ! 30: fs = (struct file_syntax *) x->av_struct; ! 31: ! 32: if ((parse_file != NULLCP) && ((pathend = rindex (parse_file,'/')) != NULLCP)) { ! 33: val = *++pathend; ! 34: *pathend = 0; ! 35: path = parse_file; ! 36: } ! 37: ! 38: last_heap = mem_heap; /* put PS on general heap */ ! 39: mem_heap = 0; ! 40: ! 41: sps = ps_alloc (str_open); ! 42: if (str_setup (sps,buffer,LINESIZE,1) == NOTOK) { ! 43: mem_heap = last_heap; ! 44: ps_free (sps); ! 45: return (NOTOK); ! 46: } ! 47: mem_heap = last_heap; ! 48: ! 49: if (parse_rdn == NULLRDN) ! 50: ps_print (sps,at->oa_ot.ot_name); ! 51: else { ! 52: rdn_print (sps,parse_rdn,EDBOUT); ! 53: ps_printf (sps,".%s",at->oa_ot.ot_name); ! 54: } ! 55: *sps->ps_ptr = 0; ! 56: ps_free (sps); ! 57: ! 58: ! 59: #ifdef SYS5 ! 60: used_temp = FALSE; ! 61: if ((full) && (strlen(buffer) > MAXFILENAMELEN)) { ! 62: char *nptr, *mptr; ! 63: char nbuf [LINESIZE]; ! 64: int i; ! 65: ! 66: nptr = buffer; ! 67: mptr = nbuf; ! 68: used_temp = TRUE; ! 69: ! 70: for (i=0 ; (*nptr!=0) && (i < MAXFILENAMELEN-6) ; nptr++) ! 71: if (isalpha(*nptr)) ! 72: *mptr++ = *nptr, i++; ! 73: ! 74: strcpy (mptr,"XXXXXX"); ! 75: if (path != NULLCP) ! 76: fs->fs_name = mktemp(strdup (_isodefile(path,nbuf))); ! 77: else ! 78: fs->fs_name = mktemp(strdup (nbuf)); ! 79: if (pathend != NULLCP) ! 80: *pathend = val; ! 81: ! 82: fs->fs_mode = 0; ! 83: return (OK); ! 84: } ! 85: #endif ! 86: ! 87: if (path != NULLCP) ! 88: fs->fs_name = strdup (_isodefile(path,buffer)); ! 89: else ! 90: fs->fs_name = strdup (buffer); ! 91: if (pathend != NULLCP) ! 92: *pathend = val; ! 93: ! 94: return (OK); ! 95: } ! 96: ! 97: ! 98: ! 99: fileattr_print (ps,y,format) ! 100: PS ps; ! 101: AttributeValue y; ! 102: int format; ! 103: { ! 104: struct file_syntax * fs; ! 105: int um; ! 106: ! 107: fs = (struct file_syntax *) y->av_struct; ! 108: ! 109: if (format != EDBOUT) ! 110: AttrV_print (ps,fs->fs_attr,format); ! 111: else { ! 112: FILE * fptr; ! 113: PS fps; ! 114: ! 115: ps_print (ps,"{FILE}"); ! 116: ! 117: if (fs->fs_name == NULLCP) { ! 118: if (dflt_attr_file (last_at,y,0) == NOTOK) { ! 119: LLOG (log_dsap,LLOG_EXCEPTIONS,("Could not make default attribute file")); ! 120: return; ! 121: } ! 122: #ifdef SYS5 ! 123: if (used_temp) ! 124: ps_print (ps,fs->fs_name); ! 125: #endif ! 126: } else if ( ! (fs->fs_mode & FS_DEFAULT)) ! 127: ps_print (ps,fs->fs_name); ! 128: ! 129: if (fs->fs_attr == NULLAttrV) /* already exists */ ! 130: return; ! 131: ! 132: if (fs->fs_mode & FS_CREATE) /* already written */ ! 133: return; ! 134: ! 135: um = umask (0177); ! 136: if ((fptr = fopen (fs->fs_name,"w")) != NULL) { ! 137: (void) umask (um); ! 138: if ((fps = ps_alloc (std_open)) == NULLPS) { ! 139: (void) fclose (fptr); ! 140: LLOG (log_dsap,LLOG_EXCEPTIONS,("Could not alloc PS file '%s'",fs->fs_name)); ! 141: return; ! 142: } ! 143: if ((std_setup (fps,fptr)) == NOTOK) { ! 144: (void) fclose (fptr); ! 145: ps_free (fps); ! 146: LLOG (log_dsap,LLOG_EXCEPTIONS,("Could not open PS file '%s'",fs->fs_name)); ! 147: return; ! 148: } ! 149: } else { ! 150: (void) umask (um); ! 151: LLOG ( log_dsap,LLOG_EXCEPTIONS,("Could not open attribute file '%s'",fs->fs_name)); ! 152: return; ! 153: } ! 154: AttrV_print (fps,fs->fs_attr,FILEOUT); ! 155: AttrV_free (fs->fs_attr); ! 156: fs->fs_attr = NULLAttrV; ! 157: (void) fclose (fptr); ! 158: ps_free (fps); ! 159: fs->fs_mode |= FS_CREATE; ! 160: ! 161: DLOG (log_dsap,LLOG_DEBUG,("Written photo file '%s'",fs->fs_name)); ! 162: } ! 163: return; ! 164: ! 165: } ! 166: ! 167:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.