private long getTailStartPos()

in src/main/java/org/apache/sling/commons/log/logback/internal/Tailer.java [60:99]


    private long getTailStartPos(RandomAccessFile file, int n) throws IOException {
        int newlineCount = 0;
        long length = file.length();
        long pos = length - BUFFER_SIZE;
        int buffLength = BUFFER_SIZE;

        if (pos < 0) {
            pos = 0;
            buffLength = (int) length;
        }

        while (true) {
            file.seek(pos);
            file.readFully(buffer, 0, buffLength);

            for (int i = buffLength - 1; i >= 0; i--) {
                if ((char) buffer[i] == '\n') {
                    newlineCount++;

                    if (newlineCount >= n) {
                        pos += (i + 1);
                        return pos;
                    }
                }
            }

            if (pos == 0) {
                break;
            }

            if (pos - BUFFER_SIZE < 0) {
                buffLength = (int) pos;
                pos = 0;
            } else {
                pos -= BUFFER_SIZE;
            }
        }

        return pos;
    }