- obj->data.tail.readlines = iter;
- if (obj->data.tail.readlines
- < obj->data.tail.wantedlines) {
- fseek(fp, 0, SEEK_SET);
- } else {
- fseek(fp, nl + 1, SEEK_SET);
- bsize -= ftell(fp);
- }
- /* Make sure bsize is at least 1 byte smaller than the
- * buffer max size. */
- if (bsize > (long) ((text_buffer_size * 20) - 1)) {
- fseek(fp, bsize - text_buffer_size * 20 - 1,
- SEEK_CUR);
- bsize = text_buffer_size * 20 - 1;
- }
- bsize = fread(obj->data.tail.buffer, 1, bsize, fp);
- fclose(fp);
- if (bsize > 0) {
- /* Clean up trailing newline, make sure the
- * buffer is null terminated. */
- if (obj->data.tail.buffer[bsize - 1] == '\n') {
- obj->data.tail.buffer[bsize - 1] = '\0';
- } else {
- obj->data.tail.buffer[bsize] = '\0';
- }
- snprintf(p, p_max_size, "%s",
- obj->data.tail.buffer);
- } else {
- strcpy(obj->data.tail.buffer, "Logfile Empty");
- snprintf(p, p_max_size, "Logfile Empty");
- } /* bsize > 0 */
- } /* fp == NULL */
- return 0;
-}
-
-long fwd_fcharfind(FILE *fp, char val, unsigned int step)
-{
-#define BUFSZ 0x1000
- long ret = -1;
- unsigned int count = 0;
- static char buf[BUFSZ];
- long orig_pos = ftell(fp);
- long buf_pos = -1;
- long buf_size = BUFSZ;
- char *cur_found = NULL;
-
- while (count < step) {
- if (cur_found == NULL) {
- buf_size = fread(buf, 1, buf_size, fp);
- buf_pos = 0;
- }
- cur_found = memchr(buf + buf_pos, val, buf_size - buf_pos);
- if (cur_found != NULL) {
- buf_pos = cur_found - buf + 1;
- count++;
- } else {
- if (feof(fp)) {
- break;
- }
- }
- }
- if (count == step) {
- ret = ftell(fp) - buf_size + buf_pos - 1;
- }
- fseek(fp, orig_pos, SEEK_SET);
- return ret;