Lines Matching defs:hp

107 help_next_file(struct help_file *hp)
112 if (hp->file_state == 3)
115 if (hp->file_state == 0)
120 if (hp->file_state == 0 || hp->file_state == 1) {
122 hp->p_start = PATH_HELP;
123 hp->file_state++;
127 if (hp->dir != NULL) {
129 while ((ent = readdir(hp->dir)) != NULL) {
132 if (asprintf(&hp->fname, "%s/%s", hp->dirname,
135 if ((hp->fp = fopen(hp->fname, "r")) != NULL) {
136 hp->fcnt++;
139 free(hp->fname);
142 closedir(hp->dir);
143 hp->dir = NULL;
144 free(hp->dirname);
150 for (hp->p_end = hp->p_start; *hp->p_end != '\0' &&
151 *hp->p_end != ':'; hp->p_end++)
154 if (asprintf(&hp->dirname, "%.*s", (int)(hp->p_end - hp->p_start),
155 hp->p_start) == -1)
158 if (hp->file_state == 1) {
160 if (asprintf(&hp->fname, "%s/%s", hp->dirname, fpat) == -1)
162 if ((hp->fp = fopen(hp->fname, "r")) != NULL) {
163 hp->fcnt++;
166 free(hp->fname);
172 if ((hp->dir = opendir(hp->dirname)) != NULL)
175 free(hp->dirname);
178 hp->p_start = hp->p_end;
179 if (*hp->p_start == '\0') {
181 if (hp->file_state == 1)
185 hp->p_start++;
194 help_file_tell(struct help_file *hp, struct help_pos *pos)
198 if ((pos->fname = strdup(hp->fname)) == NULL)
200 pos->fcnt = hp->fcnt;
201 pos->p_start = hp->p_start;
202 pos->p_end = hp->p_end;
203 if ((pos->pos = ftello(hp->fp)) == -1)
213 help_file_seek(struct help_file *hp, struct help_pos *pos)
215 hp->p_start = pos->p_start;
216 hp->p_end = pos->p_end;
217 hp->fcnt = pos->fcnt;
219 if (hp->dir != NULL) {
220 free(hp->dirname);
221 closedir(hp->dir);
222 hp->dir = NULL;
225 if (hp->fp != NULL &&strcmp(hp->fname, pos->fname) != 0) {
226 free(hp->fname);
227 fclose(hp->fp);
228 hp->fp = NULL;
230 if (hp->fp == NULL) {
231 if ((hp->fname = strdup(pos->fname)) == NULL)
233 if ((hp->fp = fopen(hp->fname, "r")) == NULL)
234 err(1, "reopen %s", hp->fname);
236 if (fseeko(hp->fp, pos->pos, SEEK_SET) == -1)
237 err(1, "seek %s", hp->fname);
241 hp->file_state = 1;
244 hp->file_state = 3;
251 help_file_rewind(struct help_file *hp)
254 if (hp->file_state == 1) {
255 if (fseeko(hp->fp, (off_t)0, SEEK_SET) == -1)
260 if (hp->dir != NULL) {
261 free(hp->dirname);
262 closedir(hp->dir);
263 hp->dir = NULL;
266 if (hp->fp != NULL) {
267 free(hp->fname);
268 fclose(hp->fp);
269 hp->fp = NULL;
271 memset(hp, 0, sizeof(*hp));
278 help_next_line(struct help_file *hp)
281 if (hp->fp != NULL) {
282 if (fgets(hp->line, sizeof(hp->line), hp->fp) != NULL)
283 return (hp->line);
284 if (ferror(hp->fp))
285 err(1, "%s", hp->fname);
286 free(hp->fname);
288 fclose(hp->fp);
289 hp->fp = NULL;
291 if (help_next_file(hp) == -1)
303 help_get_0topics(struct help_file *hp)
309 help_file_tell(hp, &save);
311 help_file_rewind(hp);
312 while ((line = help_next_line(hp)) != NULL) {
316 help_file_seek(hp, &save);