modules/ud/ud_misc.c
/* [<][>][^][v][top][bottom][index][help] */
FUNCTIONS
This source file includes following functions.
- attribute_free
- attribute_upd
- attribute_new1
- attribute_new
- object_free
- object_new
- transaction_free
- transaction_new
1 /***************************************
2 $Revision: 1.9 $
3
4 Miscellaneous functions to support UD
5
6 Status: NOT REVUED, NOT TESTED
7
8 Author(s): Chris Ottrey, Andrei Robachevsky
9
10 ******************/ /******************
11 Modification History:
12 andrei (17/01/2000) Created.
13 ******************/ /******************
14 Copyright (c) 2000 RIPE NCC
15
16 All Rights Reserved
17
18 Permission to use, copy, modify, and distribute this software and its
19 documentation for any purpose and without fee is hereby granted,
20 provided that the above copyright notice appear in all copies and that
21 both that copyright notice and this permission notice appear in
22 supporting documentation, and that the name of the author not be
23 used in advertising or publicity pertaining to distribution of the
24 software without specific, written prior permission.
25
26 THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
27 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
28 AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
29 DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
30 AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
31 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
32 ***************************************/
33 #include "ud.h"
34 #include "ud_int.h"
35
36 void attribute_free(void *data, void *ptr)
/* [<][>][^][v][top][bottom][index][help] */
37 {
38 Attribute_t *attr = data;
39
40 free(attr->value);
41 free(attr);
42 }
43
44
45 Attribute_t *attribute_upd(Attribute_t *attr, int newtype, char *newvalue)
/* [<][>][^][v][top][bottom][index][help] */
46 {
47 attr->type=newtype;
48 free(attr->value);
49 attr->value=g_strdup(newvalue);
50 return(attr);
51 }
52
53 Attribute_t *attribute_new1(int type, const char *value)
/* [<][>][^][v][top][bottom][index][help] */
54 {
55 char *n;
56 Attribute_t *attr = NULL;
57
58 attr = (Attribute_t *)calloc(1, sizeof(Attribute_t)+1);
59 attr->type = type;
60
61 /* check for end-of-line comments */
62 n = index(value, '#');
63 /* if there is no comment check for trailing \n */
64 if(n == NULL) n = index(value, '\n');
65 /* now copy the clean value into the attribute */
66 if(n == NULL) attr->value = g_strdup(value);
67 else attr->value = g_strndup(value, (n - value));
68 /* Strip the whitespace */
69 g_strstrip(attr->value);
70 return(attr);
71
72 }
73
74 Attribute_t *attribute_new(const char *line) {
/* [<][>][^][v][top][bottom][index][help] */
75 Attribute_t *attr = NULL;
76 int type;
77 char *colon;
78 gchar *token;
79
80
81 colon = index(line, ':');
82 if (colon != NULL) {
83 if (line[0] =='*') {
84 token = g_strndup(line+1, 2);
85 type = DF_attribute_code2type(token);
86 }
87 else {
88 token = g_strndup(line, (colon - line));
89 type = DF_attribute_name2type(token);
90 }
91 if(token)free(token);
92
93 colon+=2;
94 if (type >= 0) {
95 attr=attribute_new1(type, colon);
96 }
97 else {
98 /* fprintf(stderr, "ERROR: Bad attribute: %s\n", token);*/
99 }
100 }
101 else {
102 /* fprintf(stderr, "ERROR: Not an attribute: %s\n", line);*/
103 }
104 return attr;
105 } /* attribute_new() */
106
107
108 void object_free(Object_t *obj) {
/* [<][>][^][v][top][bottom][index][help] */
109 if (obj) {
110 g_slist_foreach(obj->attributes, attribute_free, NULL);
111 g_slist_free(obj->attributes);
112 g_string_free(obj->object, TRUE);
113 free(obj);
114 }
115 } /* object_free() */
116
117 Object_t *object_new(const char *line) {
/* [<][>][^][v][top][bottom][index][help] */
118 Object_t *obj = NULL;
119
120 int type;
121 char *colon;
122 gchar *token;
123
124 colon = index(line, ':');
125 if (colon != NULL) {
126 if (line[0] =='*') {
127 token = g_strndup(line+1, 2);
128 type = DF_class_code2type(token);
129 }
130 else {
131 token = g_strndup(line, (colon - line));
132 type = DF_class_name2type(token);
133 }
134 if(token)free(token);
135
136 if (type >= 0) {
137 obj = (Object_t *)calloc(1, sizeof(Object_t)+1);
138 obj->attributes = NULL;
139 obj->object = g_string_sized_new(STR_XXXL);
140 obj->type = type;
141 }
142 else {
143 /* fprintf(stderr, "ERROR: Object has an invalid class: %s\n");*/
144 }
145 }
146 else {
147 /* fprintf(stderr, "ERROR: No colon found in line: %s\n", line);*/
148 }
149
150 return obj;
151 } /* object_new() */
152
153
154
155
156 /************************************************************
157 *void transaction_free(Transaction_t *tr)
158 *
159 * **********************************************************/
160 void transaction_free(Transaction_t *tr) {
/* [<][>][^][v][top][bottom][index][help] */
161 if(tr) {
162 g_string_free(tr->error_script, TRUE);
163 /* free nic_handle_t structure used for NHR stuff */
164 if(tr->nh)free_nh(tr->nh);
165 if(tr->save)free(tr->save);
166 free(tr);
167 }
168 } /* transaction_free() */
169
170 /************************************************************
171 *Transaction_t *transaction_new(SQ_connection_t *sql_connection, C_Type_t class_type)
172 *
173 * **********************************************************/
174 Transaction_t *transaction_new(SQ_connection_t *sql_connection, C_Type_t class_type) {
/* [<][>][^][v][top][bottom][index][help] */
175 Transaction_t *tr = (Transaction_t *)calloc(1, sizeof(Transaction_t));
176
177 if (tr != NULL) {
178 tr->sql_connection = sql_connection;
179 tr->class_type = class_type;
180 tr->thread_upd=TR_UPDATE;
181 tr->thread_ins=TR_INSERT;
182 tr->object_id = 0; /* Just in case*/
183 tr->succeeded = 1;
184 tr->error=0;
185 tr->error_script = g_string_sized_new(STR_XL);
186 tr->dummy = 0; /* By default do not create dummies except for sets*/
187 tr->ndummy=0;
188 tr->action=100;
189 tr->load_pass=0; /* by default*/
190 tr->sequence_id=1; /* we start from 1*/
191 tr->save=NULL;
192 tr->nh=NULL;
193 tr->packptr=NULL;
194 }
195 return tr;
196 } /* transaction_new() */