|
|
1.1 ! root 1: /* ftamfaduid.c - FPM: encode/decode FADU identities */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/ftam/RCS/ftamfaduid.c,v 7.0 89/11/23 21:53:36 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/ftam/RCS/ftamfaduid.c,v 7.0 89/11/23 21:53:36 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: ftamfaduid.c,v $ ! 12: * Revision 7.0 89/11/23 21:53:36 mrose ! 13: * Release 6.0 ! 14: * ! 15: */ ! 16: ! 17: /* ! 18: * NOTICE ! 19: * ! 20: * Acquisition, use, and distribution of this module and related ! 21: * materials are subject to the restrictions of a license agreement. ! 22: * Consult the Preface in the User's Manual for the full terms of ! 23: * this agreement. ! 24: * ! 25: */ ! 26: ! 27: ! 28: /* LINTLIBRARY */ ! 29: ! 30: #include <stdio.h> ! 31: #include "fpkt.h" ! 32: ! 33: /* */ ! 34: ! 35: struct type_FTAM_FADU__Identity *faduid2fpm (fsb, fa, fti) ! 36: register struct ftamblk *fsb; ! 37: register struct FADUidentity *fa; ! 38: struct FTAMindication *fti; ! 39: { ! 40: register int n; ! 41: register char **ap; ! 42: register struct type_FTAM_FADU__Identity *fpm; ! 43: register struct name_element **f4; ! 44: ! 45: if ((fpm = (struct type_FTAM_FADU__Identity *) calloc (1, sizeof *fpm)) ! 46: == NULL) { ! 47: no_mem: ; ! 48: (void) ftamlose (fti, FS_GEN (fsb), 1, NULLCP, "out of memory"); ! 49: out: ; ! 50: if (fpm) ! 51: free_FTAM_FADU__Identity (fpm); ! 52: return NULL; ! 53: } ! 54: ! 55: switch (fa -> fa_type) { ! 56: case FA_FIRSTLAST: ! 57: fpm -> offset = type_FTAM_FADU__Identity_first__last; ! 58: switch (fa -> fa_firstlast) { ! 59: case FA_FIRST: ! 60: case FA_LAST: ! 61: break; ! 62: ! 63: default: ! 64: bad_value:; ! 65: (void) ftamlose (fti, FS_GEN (fsb), 0, NULLCP, ! 66: "bad value in FADU identity"); ! 67: goto out; ! 68: } ! 69: fpm -> un.first__last = fa -> fa_firstlast; ! 70: break; ! 71: ! 72: case FA_RELATIVE: ! 73: fpm -> offset = type_FTAM_FADU__Identity_relative; ! 74: switch (fa -> fa_relative) { ! 75: case FA_PREVIOUS: ! 76: case FA_CURRENT: ! 77: case FA_NEXT: ! 78: break; ! 79: ! 80: default: ! 81: goto bad_value; ! 82: } ! 83: fpm -> un.relative = fa -> fa_relative; ! 84: break; ! 85: ! 86: case FA_BEGINEND: ! 87: fpm -> offset = type_FTAM_FADU__Identity_begin__end; ! 88: switch (fa -> fa_beginend) { ! 89: case FA_BEGIN: ! 90: case FA_END: ! 91: break; ! 92: ! 93: default: ! 94: goto out; ! 95: } ! 96: fpm -> un.begin__end = fa -> fa_beginend; ! 97: break; ! 98: ! 99: case FA_SINGLE: ! 100: if (!fa -> fa_singlename) ! 101: goto bad_value; ! 102: fpm -> offset = type_FTAM_FADU__Identity_single__name; ! 103: if ((fpm -> un.single__name = ! 104: str2qb (fa -> fa_singlename, ! 105: strlen (fa -> fa_singlename), ! 106: 1)) == NULL) ! 107: goto no_mem; ! 108: break; ! 109: ! 110: case FA_NAMELIST: ! 111: f4 = &fpm -> un.name__list; ! 112: for (n = fa -> fa_nname - 1, ap = fa -> fa_names; ! 113: n >= 0; ! 114: ap++, n--) { ! 115: if (!*ap) ! 116: goto bad_value; ! 117: if ((*f4 = (struct name_element *) calloc (1, sizeof **f4)) ! 118: == NULL ! 119: || ((*f4) -> Node__Name = ! 120: str2qb (*ap, strlen (*ap), 1)) == NULL) ! 121: goto no_mem; ! 122: f4 = &((*f4) -> next); ! 123: } ! 124: break; ! 125: ! 126: case FA_FADUNUMBER: ! 127: fpm -> offset = type_FTAM_FADU__Identity_fadu__number; ! 128: fpm -> un.fadu__number = fa -> fa_fadunumber; ! 129: break; ! 130: ! 131: default: ! 132: (void) ftamlose (fti, FS_GEN (fsb), 0, NULLCP, ! 133: "bad type for FADU identity"); ! 134: goto out; ! 135: } ! 136: ! 137: return fpm; ! 138: } ! 139: ! 140: /* */ ! 141: ! 142: int fpm2faduid (fsb, fpm, fa, fti) ! 143: register struct ftamblk *fsb; ! 144: register struct type_FTAM_FADU__Identity *fpm; ! 145: register struct FADUidentity *fa; ! 146: struct FTAMindication *fti; ! 147: { ! 148: register int n; ! 149: register char **ap; ! 150: register struct name_element *f4; ! 151: ! 152: bzero ((char *) fa, sizeof *fa); ! 153: ! 154: switch (fpm -> offset) { ! 155: case type_FTAM_FADU__Identity_first__last: ! 156: fa -> fa_type = FA_FIRSTLAST; ! 157: fa -> fa_firstlast = fpm -> un.first__last; ! 158: break; ! 159: ! 160: case type_FTAM_FADU__Identity_relative: ! 161: fa -> fa_type = FA_RELATIVE; ! 162: fa -> fa_relative = fpm -> un.relative; ! 163: break; ! 164: ! 165: case type_FTAM_FADU__Identity_begin__end: ! 166: fa -> fa_type = FA_BEGINEND; ! 167: fa -> fa_beginend = fpm -> un.begin__end; ! 168: break; ! 169: ! 170: case type_FTAM_FADU__Identity_single__name: ! 171: fa -> fa_type = FA_SINGLE; ! 172: if ((fa -> fa_singlename = qb2str (fpm -> un.single__name)) ! 173: == NULL) { ! 174: no_mem: ; ! 175: FUFREE (fa); ! 176: return ftamlose (fti, FS_GEN (fsb), 1, NULLCP, ! 177: "out of memory"); ! 178: } ! 179: break; ! 180: ! 181: case type_FTAM_FADU__Identity_name__list: ! 182: fa -> fa_type = FA_NAMELIST; ! 183: ap = fa -> fa_names, n = NANAME; ! 184: for (f4 = fpm -> un.name__list; f4; f4 = f4 -> next) { ! 185: if (n-- <= 0) { ! 186: FUFREE (fa); ! 187: return ftamlose (fti, FS_GEN (fsb), 1, NULLCP, ! 188: "too many nodes in FADU name"); ! 189: } ! 190: if ((*ap++ = qb2str (f4 -> Node__Name)) == NULL) ! 191: goto no_mem; ! 192: } ! 193: break; ! 194: ! 195: case type_FTAM_FADU__Identity_fadu__number: ! 196: fa -> fa_type = FA_FADUNUMBER; ! 197: fa -> fa_fadunumber = fpm -> un.fadu__number; ! 198: break; ! 199: } ! 200: ! 201: return OK; ! 202: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.