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