|
|
1.1 root 1: /* ftamchrg.c - FPM: encode/decode charging */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/ftam/RCS/ftamchrg.c,v 7.0 89/11/23 21:53:30 mrose Rel $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/ftam/RCS/ftamchrg.c,v 7.0 89/11/23 21:53:30 mrose Rel $
9: *
10: *
11: * $Log: ftamchrg.c,v $
12: * Revision 7.0 89/11/23 21:53:30 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_Charging *chrg2fpm (fsb, charging, fti)
36: register struct ftamblk *fsb;
37: register struct FTAMcharging *charging;
38: struct FTAMindication *fti;
39: {
40: register int i;
41: register struct fc_charge *fc;
42: struct type_FTAM_Charging *fpmp;
43: register struct type_FTAM_Charging *fpm,
44: **fpc;
45: register struct charge_element *f1;
46:
47: fpmp = NULL, fpc = &fpmp;
48: for (fc = charging -> fc_charges, i = charging -> fc_ncharge - 1;
49: i >= 0;
50: fc++, i--) {
51: if (fc -> fc_resource == NULL || fc -> fc_unit == NULL) {
52: (void) ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
53: "empty charge at slot %d",
54: charging -> fc_ncharge - i - 1);
55: goto out;
56: }
57:
58: if ((fpm = (struct type_FTAM_Charging *) calloc (1, sizeof *fpm))
59: == NULL) {
60: no_mem: ;
61: (void) ftamlose (fti, FS_GEN (fsb), 1, NULLCP, "out of memory");
62: out: ;
63: if (fpmp)
64: free_FTAM_Charging (fpmp);
65: return NULL;
66: }
67: *fpc = fpm;
68:
69: if ((f1 = (struct charge_element *) calloc (1, sizeof *f1)) == NULL)
70: goto no_mem;
71: fpm -> charge = f1;
72:
73: if ((f1 -> resource__identifier = str2qb (fc -> fc_resource,
74: strlen (fc -> fc_resource),
75: 1))
76: == NULL
77: || (f1 -> charging__unit = str2qb (fc -> fc_unit,
78: strlen (fc -> fc_unit), 1))
79: == NULL)
80: goto no_mem;
81: f1 -> charging__value = fc -> fc_value;
82:
83: fpc = &fpm -> next;
84: }
85:
86: return fpmp;
87: }
88:
89: /* */
90:
91: int fpm2chrg (fsb, fpm, charging, fti)
92: register struct ftamblk *fsb;
93: register struct type_FTAM_Charging *fpm;
94: register struct FTAMcharging *charging;
95: struct FTAMindication *fti;
96: {
97: register int i;
98: register struct fc_charge *fc;
99: register struct charge_element *f1;
100:
101: bzero ((char *) charging, sizeof *charging);
102:
103: fc = charging -> fc_charges, i = 0;
104: for (; fpm; fpm = fpm -> next) {
105: if (i >= NFCHRG)
106: return ftamlose (fti, FS_GEN (fsb), 1, NULLCP,
107: "too many charges");
108:
109: f1 = fpm -> charge;
110: if ((fc -> fc_resource = qb2str (f1 -> resource__identifier)) == NULL
111: || (fc -> fc_unit = qb2str (f1 -> charging__unit)) == NULL) {
112: if (fc -> fc_resource)
113: free (fc -> fc_resource), fc -> fc_resource = NULL;
114: while (i-- > 0) {
115: fc--;
116: free (fc -> fc_resource), fc -> fc_resource = NULL;
117: free (fc -> fc_unit), fc -> fc_unit = NULL;
118: }
119:
120: return ftamlose (fti, FS_GEN (fsb), 1, NULLCP, "out of memory");
121: }
122: fc -> fc_value = f1 -> charging__value;
123:
124: fc++, i++;
125: }
126:
127: return OK;
128: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.