Home | History | Annotate | Download | only in net

Lines Matching refs:sd

59 _servent_open(struct servent_data *sd)
61 if (sd->flags & (_SV_CDB | _SV_PLAINFILE)) {
62 sd->flags |= _SV_FIRST;
66 free(sd->line);
67 sd->line = NULL;
68 free(sd->cdb_buf);
69 sd->cdb_buf = NULL;
70 sd->cdb_buf_len = 0;
71 free(sd->aliases);
72 sd->aliases = NULL;
73 sd->maxaliases = 0;
74 sd->flags |= _SV_FIRST;
76 sd->cdb = cdbr_open(_PATH_SERVICES_CDB, CDBR_DEFAULT);
77 if (sd->cdb != NULL) {
78 sd->flags |= _SV_CDB;
82 sd->plainfile = fopen(_PATH_SERVICES, "re");
83 if (sd->plainfile != NULL) {
84 sd->flags |= _SV_PLAINFILE;
91 _servent_close(struct servent_data *sd)
93 if (sd->flags & _SV_CDB) {
94 cdbr_close(sd->cdb);
95 sd->cdb = NULL;
96 sd->flags &= ~_SV_CDB;
99 if (sd->flags & _SV_PLAINFILE) {
100 (void)fclose(sd->plainfile);
101 sd->plainfile = NULL;
102 sd->flags &= ~_SV_PLAINFILE;
104 sd->flags &= ~_SV_STAYOPEN;
109 _servent_getline(struct servent_data *sd)
112 if (sd->flags & _SV_CDB)
115 if ((sd->flags & _SV_PLAINFILE) == 0)
118 free(sd->line);
119 sd->line = NULL;
121 if (sd->flags & _SV_FIRST) {
122 (void)rewind((FILE *)sd->plainfile);
123 sd->flags &= ~_SV_FIRST;
125 sd->line = fparseln(sd->plainfile, NULL, NULL, NULL,
127 return sd->line == NULL ? -1 : 0;
131 _servent_parseline(struct servent_data *sd, struct servent *sp)
137 if (sd->line == NULL)
140 sp->s_name = p = sd->line;
153 if (sd->aliases == NULL) {
154 sd->maxaliases = 10;
155 sd->aliases = calloc(sd->maxaliases, sizeof(*sd->aliases));
156 if (sd->aliases == NULL) {
158 endservent_r(sd);
163 sp->s_aliases = sd->aliases;
172 if (i == sd->maxaliases - 2) {
173 sd->maxaliases *= 2;
174 q = realloc(sd->aliases, sd->maxaliases * sizeof(*q));
177 endservent_r(sd);
181 sp->s_aliases = sd->aliases = q;
193 setservent_r(int f, struct servent_data *sd)
195 (void)_servent_open(sd);
196 sd->flags |= f ? _SV_STAYOPEN : 0;
200 endservent_r(struct servent_data *sd)
202 _servent_close(sd);
203 free(sd->aliases);
204 sd->aliases = NULL;
205 sd->maxaliases = 0;
206 free(sd->line);
207 sd->line = NULL;
208 free(sd->cdb_buf);
209 sd->cdb_buf = NULL;
210 sd->cdb_buf_len = 0;
214 getservent_r(struct servent *sp, struct servent_data *sd)
217 if ((sd->flags & (_SV_CDB | _SV_PLAINFILE)) == 0 &&
218 _servent_open(sd) == -1)
221 if (sd->flags & _SV_CDB) {
225 if (sd->flags & _SV_FIRST) {
226 sd->cdb_index = 0;
227 sd->flags &= ~_SV_FIRST;
230 if (cdbr_get(sd->cdb, sd->cdb_index, &data, &len))
232 ++sd->cdb_index;
233 return _servent_parsedb(sd, sp, data, len);
235 if (sd->flags & _SV_PLAINFILE) {
237 if (_servent_getline(sd) == -1)
239 if (_servent_parseline(sd, sp) == NULL)
248 _servent_parsedb(struct servent_data *sd, struct servent *sp,
255 if ((sd->flags & _SV_STAYOPEN) == 0) {
256 if (len > sd->cdb_buf_len) {
257 void *tmp = realloc(sd->cdb_buf, len);
260 sd->cdb_buf = tmp;
261 sd->cdb_buf_len = len;
263 memcpy(sd->cdb_buf, data, len);
264 data = sd->cdb_buf;
292 if (sd->aliases == NULL) {
293 sd->maxaliases = 10;
294 sd->aliases = NULL;
295 errno = reallocarr(&sd->aliases,
296 sd->maxaliases, sizeof(*sd->aliases));
300 sp->s_aliases = sd->aliases;
305 if (i == sd->maxaliases - 2) {
306 sd->maxaliases *= 2;
307 q = sd->aliases;
308 errno = reallocarr(&q, sd->maxaliases, sizeof(*q));
311 sp->s_aliases = sd->aliases = q;
322 endservent_r(sd);