|
|
1.1 ! root 1: #include "quipu/util.h" ! 2: #include "quipu/attrvalue.h" ! 3: ! 4: extern LLog * log_dsap; ! 5: ! 6: PE grab_filepe (av) ! 7: AttributeValue av; ! 8: { ! 9: FILE * fptr; ! 10: struct file_syntax * fs; ! 11: sntx_table *tbl, * get_syntax_table(); ! 12: PE ret_pe, grab_pe(); ! 13: ! 14: ! 15: fs = (struct file_syntax *) av->av_struct; ! 16: ! 17: if (fs->fs_attr != NULLAttrV) ! 18: return (grab_pe (fs->fs_attr)); ! 19: ! 20: if (fs->fs_name == NULLCP) ! 21: return (NULLPE); /* should never happen */ ! 22: ! 23: if ((fptr = fopen (fs->fs_name,"r")) != NULL) { ! 24: tbl = get_syntax_table (fs->fs_real_syntax); ! 25: if (tbl->s_parse == NULLIFP) { /* treat as pure asn */ ! 26: PS fps; ! 27: fps = ps_alloc (std_open); ! 28: if ((std_setup (fps,fptr)) == NOTOK) { ! 29: (void) fclose (fptr); ! 30: ps_free (fps); ! 31: return (NULLPE); ! 32: } ! 33: if ((ret_pe = ps2pe (fps)) == NULLPE) ! 34: LLOG (log_dsap,LLOG_EXCEPTIONS,("invalid ASN if file %s",fs->fs_name)); ! 35: (void) fclose (fptr); ! 36: ps_free (fps); ! 37: } else { ! 38: char buffer [LINESIZE]; ! 39: AttributeValue newav; ! 40: extern char * TidyString (); ! 41: ! 42: (void) fread (buffer,LINESIZE,1,fptr); ! 43: (void) fclose (fptr); ! 44: if ((newav = str2AttrV (TidyString(buffer),fs->fs_real_syntax)) == NULLAttrV){ ! 45: LLOG (log_dsap,LLOG_EXCEPTIONS,("invalid format in file %s",fs->fs_name)); ! 46: } ! 47: ret_pe = grab_pe (newav); ! 48: AttrV_free (newav); ! 49: } ! 50: } else { ! 51: LLOG(log_dsap,LLOG_EXCEPTIONS,("Can't open %s",fs->fs_name)); ! 52: /* Return the PE containing NULL ! 53: /* a NULLPE will cause the encode to fail, thus make the ! 54: /* operation fail. ! 55: /* Real solution is to remove the attribute at the encode ! 56: /* stage - but that is tricky... ! 57: */ ! 58: ! 59: return (pe_alloc (PE_CLASS_UNIV, PE_FORM_PRIM, PE_PRIM_NULL)); ! 60: } ! 61: return (ret_pe); ! 62: ! 63: } ! 64: ! 65: ! 66: file_decode (x) ! 67: AttributeValue x; ! 68: { ! 69: struct file_syntax * fs; ! 70: ! 71: fs = (struct file_syntax *) smalloc (sizeof(struct file_syntax)); ! 72: fs->fs_ref = 1; ! 73: fs->fs_real_syntax = x->av_syntax - AV_WRITE_FILE; ! 74: fs->fs_name = NULLCP; ! 75: fs->fs_mode = FS_DEFAULT; ! 76: ! 77: fs->fs_attr = AttrV_alloc (); ! 78: fs->fs_attr->av_syntax = x->av_syntax - AV_WRITE_FILE; ! 79: fs->fs_attr->av_struct = x->av_struct; ! 80: ! 81: x->av_syntax = AV_FILE; ! 82: x->av_struct = (caddr_t)fs; ! 83: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.