Commit 71ba35cc authored by Peter Pentchev's avatar Peter Pentchev

Remove some unused buffer.c functions

parent f4dafe54
......@@ -5,6 +5,7 @@ Change log for hexer, the multi-view binary editor
- provide a better vasprintf() simulation to fix a display bug
- use sigemptyset() instead of a direct assignment to sigset_t
(reported by Daniel Schepler <dschepler@gmail.com>)
- remove some unused functions
0.1.8 2014/09/11
- fix a crash when inserting or replacing a half-byte
......
......@@ -182,31 +182,6 @@ delete_buffer(Buffer * const buffer)
}
/* delete_buffer */
int
copy_buffer(Buffer *target, Buffer *source)
/* NOTE: `copy_buffer()' only copies the contents of `source', i.e.
* the blocksize of `target' is kept unchanged.
*/
{
BufferBlock *i;
unsigned long position = 0;
assert(!target->read_only);
if (target == source) return 0;
b_clear(target);
for (i = source->first_block; i; i = i->next_block)
position += b_write(target, i->data, position, source->blocksize);
return 0;
}
/* copy_buffer */
void
clear_buffer(Buffer *buffer)
{
b_clear(buffer);
}
/* clear_buffer */
BufferBlock *
find_block(Buffer *buffer, unsigned long position)
{
......@@ -319,41 +294,6 @@ b_append(Buffer *buffer, char *source, unsigned long count)
}
/* b_append */
long
b_fill(Buffer *buffer, char c, unsigned long position, unsigned long count)
{
BufferBlock *block;
unsigned long bs = buffer->blocksize;
unsigned long ofs = position % bs;
unsigned long r = bs - ofs;
assert(!buffer->read_only);
if (count) BUFFER_CHANGED(buffer);
if (!(block = find_block(buffer, position))) return -1;
if (count + position > buffer->size) count = buffer->size - position;
if (count <= r) {
memset(block->data + ofs, c, count);
return count;
} else {
memset(block->data + ofs, c, r);
long more = b_fill(buffer, c, position + r, count - r);
if (more < 0)
return more;
return r + more;
}
}
/* b_fill */
long
b_fill_append(Buffer *buffer, char c, unsigned long position, unsigned long count)
{
if (position + count > buffer->size)
if (b_set_size(buffer, position + count) < 0)
return -1;
return b_fill(buffer, c, position, count);
}
/* b_fill_append */
unsigned long
b_count_lines(Buffer *buffer, unsigned long position, unsigned long count)
{
......@@ -686,197 +626,6 @@ b_goto_line(Buffer *buffer, unsigned long number)
}
/* b_goto_line */
/* FIXME: THIS IS TOTALLY INCORRECT and unused, remove it! */
unsigned long
b_get_linenumber(Buffer *buffer, unsigned long position)
{
unsigned long number;
if (buffer == last_buffer && last_position >= 0 && position == (unsigned long)last_position)
return last_number;
number = b_count_lines(buffer, 0, position - 1) - 1;
if (number > 0) {
last_number = number;
last_position = position;
last_length = -1;
last_buffer = buffer;
}
return number;
}
/* b_get_linenumber */
long
b_line_start(Buffer *buffer, unsigned long position)
{
const unsigned long bs = buffer -> blocksize;
BufferBlock *i;
unsigned long ofs;
if (!(i = find_block(buffer, position))) return -1;
for (ofs = position + 1; ofs > 0; ofs--)
if (i->data[ofs - 1] == '\n')
return (position / bs) * bs + ofs;
if (position < bs)
return 0;
return b_line_start(buffer, (position / bs) * bs - 1);
}
/* b_line_start */
long
b_line_end(Buffer *buffer, unsigned long position)
{
const unsigned long bs = buffer -> blocksize;
BufferBlock *i;
size_t ofs;
if (position >= buffer -> size) return buffer -> size;
if (!(i = find_block(buffer, position))) return -1;
for (ofs = position % bs; ofs < bs; ofs++)
if (i->data[ofs] == '\n')
return (position / bs) * bs + ofs;
return b_line_end(buffer, (position / bs + 1) * bs);
}
/* b_line_end */
long
b_length_of_line(Buffer *buffer, unsigned long number)
{
long position;
if (buffer == last_buffer && last_number >= 0 && number == (unsigned long)last_number && last_length != -1)
return last_length;
position = b_goto_line(buffer, number);
if (position < 0)
return position;
long end = b_line_end(buffer, position);
if (end < 0)
return end;
last_length = end - position + 1;
return last_length;
/* The values of `last_position' and `last_number' have been set already
* by `b_goto_line()'. */
}
/* b_length_of_line */
long
b_length_of_text_block(Buffer *buffer, unsigned long number, unsigned long count)
{
long start;
unsigned long end;
start = b_goto_line(buffer, number);
if (start < 0)
return start;
end = start;
for (; count > 0 && end != buffer -> size; count--) {
long nend = b_line_end(buffer, end);
if (nend < 0)
return nend;
end = nend + 1;
}
return end - start;
}
/* b_length_of_text_block */
long
b_read_line(Buffer *buffer, char *line, unsigned long number)
{
long position = b_goto_line(buffer, number);
long length = b_length_of_line(buffer, number);
long bytes_read;
assert(number > 0);
if (position < 0 || length < 0)
return -1;
bytes_read = b_read(buffer, line, position, length);
if (bytes_read < 0)
return bytes_read;
if (bytes_read < length) bytes_read++;
line[bytes_read - 1] = '\0';
return bytes_read;
}
/* b_read_line */
long
b_read_text_block(Buffer *buffer, char *target, unsigned long number, unsigned long count)
{
long start = b_goto_line(buffer, number), length;
unsigned long end;
long bytes_read;
if (start < 0)
return start;
end = start;
length = b_length_of_text_block(buffer, number, count);
if (length < 0)
return length;
bytes_read = b_read(buffer, target, start, length);
if (bytes_read < 0)
return bytes_read;
if ((unsigned long)bytes_read < end - start) bytes_read++;
target[bytes_read - 1] = '\0';
return bytes_read;
}
/* b_read_text_block */
long
b_delete_line(Buffer *buffer, unsigned long number)
{
long position = b_goto_line(buffer, number);
long length = b_length_of_line(buffer, number);
if (position < 0 || length < 0)
return -1;
return b_delete(buffer, position, length);
}
/* b_delete_line */
long
b_delete_text_block(Buffer *buffer, unsigned long number, unsigned long count)
{
long start = b_goto_line(buffer, number);
unsigned long end;
if (start < 0)
return start;
end = start;
for (; count > 0; count--) {
long nend = b_line_end(buffer, end);
if (nend < 0)
return nend;
end = nend + 1;
}
return b_delete(buffer, start, end - start);
}
/* b_delete_text_block */
long
b_clear_line(Buffer *buffer, unsigned long number)
{
long position = b_goto_line(buffer, number);
long length = b_length_of_line(buffer, number);
if (position < 0 || length < 0)
return -1;
return b_delete(buffer, position, length ? length - 1 : 0);
}
/* b_clear_line */
long
b_insert_text_block(Buffer *buffer, char *source, unsigned long number)
{
long position = b_goto_line(buffer, number);
long bytes_inserted;
if (position < 0)
return position;
bytes_inserted = b_insert(buffer, position, strlen(source) + 1);
if (bytes_inserted < 0) return -1;
source[bytes_inserted - 1] = '\n';
return b_write(buffer, source, position, bytes_inserted);
}
/* b_insert_text_block */
/* end of buffer.c */
......
......@@ -188,28 +188,6 @@ delete_buffer(Buffer *buffer);
/* Destruktor fuer 'Buffer'.
*/
int
copy_buffer(Buffer *target, Buffer *source);
/* Kopierfunktion fuer 'Buffer'. Es wird nur eine *inhaltliche*n Kopie
* des Buffers angelegt, d.h. die Blockgroessen von '*target' und
* '*source' bleiben unveraendert.
* target:
* Zeiger auf den Zielbuffer.
* source:
* Zeiger auf den Quellbuffer.
* Rueckgabe:
* Immer 0. Eine Fehlerabfrage ist noch nicht implementiert.
* (Im Fehlerfall sollte -1 geliefert werden.)
* BEMERKUNG: Der Zielbuffer '*target' muss existieren, d.h. die Funktion
* darf nicht als Konstruktor missbraucht werden.
*/
void
clear_buffer(Buffer *buffer);
/* Loescht den Buffer '*buffer', d.h. buffer zeigt nach dem Aufruf auf
* einen leeren Buffer. (Diese Funktion ruft einfach nur 'b_clear()' auf.
*/
BufferBlock *
find_block(Buffer *buffer, unsigned long position);
/* Liefert einen Zeiger auf den BufferBlock des Buffers '*buffer', in dem
......@@ -272,22 +250,6 @@ b_append(Buffer *buffer, char *source, unsigned long count);
* wird -1 zurueckgeliefert, `count' sonst.
*/
long
b_fill(Buffer *buffer, char c, unsigned long position, unsigned long count);
/* Wie 'b_write', nur dass der angegebene Speicherbereich mit dem Zeichen
* 'c' beschrieben wird. Die Funktion schreibt nicht ueber das Ende des
* Buffers hinaus und liefert die Anzahl der geschriebenen Zeichen zurueck.
* Eine Fehlerabfrage ist nicht implementiert.
*/
long
b_fill_append(Buffer *buffer, char c, unsigned long position, unsigned long count);
/* Wie 'b_fill', es kann aber auch an Positionen jenseits des Bufferendes
* geschrieben werden. Der Inhalt des Buffers zwischen vorherigem Bufferende
* und 'position' ist undefiniert. Im Fehlerfall wird -1 geliefert,
* 'count' sonst.
*/
unsigned long
b_count_lines(Buffer *buffer, unsigned long position, unsigned long count);
/* Liefert die Anzahl der Zeilentrenner im angegebenen Bereich.
......@@ -375,100 +337,6 @@ b_goto_line(Buffer *buffer, unsigned long number);
* Buffers ist, wird -1 geliefert.
*/
unsigned long
b_get_linenumber(Buffer *buffer, unsigned long position);
/* Liefert die Nummer der Zeile, in der sich die Position 'position'
* befindet. Falls 'position' ausserhalb der Buffergrenzen liegt,
* wird -1 geliefert.
*/
long
b_line_start(Buffer *buffer, unsigned long position);
/* Liefert die Position des Anfangs der Zeile, in der sich die Position
* 'position' befindet. Falls 'position' ausserhalb der Buffergrenzen
* liegt, wird -1 geliefert.
* Ausnahme: Fuer negative Werte von 'position' wird immer 0 geliefert.
*/
long
b_line_end(Buffer *buffer, unsigned long position);
/* Liefert die Position des Zeilentrenners der Zeile, in der sich
* die Position 'position' befindet. Falls 'position' ausserhalb der
* Buffergrenzen liegt, wird -1 geliefert.
*/
long
b_length_of_line(Buffer *buffer, unsigned long number);
/* Liefert die Laenge der Zeile 'number' (incl. Zeilentrenner) und 0,
* falls diese Zeile nicht existiert.
* NOTE: Falls 'number' die letzte Zeile im Buffer ist und der Buffer
* *nicht* mit einem Zeilentrenner endet, tut die Funktion so, als
* waere der Zeilentrenner vorhanden.
*/
long
b_length_of_text_block(Buffer *buffer, unsigned long number, unsigned long count);
/* Liefert die Laenge des 'count' Zeilen langen Textblocks ab Zeile
* 'number' (incl. der Zeilentrenner). Falls die Zeile 'number' nicht
* existiert, wird 0 geliefert. Falls nach der Zeile 'number' keine
* wieteren 'count - 1' Zeilen existieren, werden die nicht existierenden
* Zeilen als Zeilen der Laenge 0 aufgefasst.
* NOTE: Zeilen, die nur aus einem Zeilentrenner bestehen, sind Zeilen
* der Laenge 1.
*/
long
b_read_line(Buffer *buffer, char *line, unsigned long number);
/* Kopiert die Zeile 'number' nach 'line' und liefert die Laenge
* der kopierten Zeile (incl. Endezeichen).
* NOTE: Die Funktion ersetzt den Zeilerntrenner '\n' durch ein
* Stringende-Zeichen '\0', d.h. der Rueckgabewert der Funktion
* 'b_length_of_line()' kann fuer den betreffenden 'malloc()'-Aufruf
* verwendet werden.
*/
long
b_read_text_block(Buffer *buffer, char *target,
unsigned long number, unsigned long count);
/* Kopiert ab Zeile 'number' (incl.) 'count' Zeilen nach 'target'.
* Die Zeilentrenner werden mitkopiert, der letzte Zeilentrenner wird
* durch ein '\0' ersetzt. Liefert die Anzahl der kopierten Bytes (analog
* zu 'b_lenght_of_text_block()').
*/
long
b_delete_line(Buffer *buffer, unsigned long number);
/* Loescht die Zeile 'number' (incl. Zeilentrenner) aus dem Buffer.
* Liefert die Anzahl der geloeschten Bytes und 0 bei einer ungueltigen
* Zeilenangabe.
*/
long
b_delete_text_block(Buffer *buffer, unsigned long number, unsigned long count);
/* Loescht ab Zeile 'number' (incl.) 'count' Zeilen.
* Liefert die Anzahl der geloeschten Bytes und 0 bei einer ungueltigen
* Bereichsangabe.
*/
long
b_clear_line(Buffer *buffer, unsigned long number);
/* Wie 'b_delete_line()', nur dass der Zeilentrenner nicht mitgeloescht
* wird. Geliefert wird die Anzahl der geloeschten Bytes + 1 und 0, falls
* die Zeilenangabe ungueltig war.
* NOTE: Falls eine Zeile nur den Zeilentrenner enthaelt, wird eine 1
* geliefert.
*/
long
b_insert_text_block(Buffer *buffer, char *source, unsigned long number);
/* Der gegebene Textblock 'source' wird nach der Zeile 'number'
* eingefuegt. Das Stringende-Zeichen '\0' von 'source' wird dabei in
* einen Zeilentrenner umgewandelt. Falls 'number' eine negative Zahl
* ist, wird der Textblock am Ende des Buffers angehaengt, falls 'number'
* ausserhalb des Buffers liegt, wird das als Fehler interpretiert.
* Geliefert wird die Anzahl der eingefuegten Bytes und -1 im Fehlerfall.
*/
/* In diesem Zusammenhang sind weitere Funktionen geplant, die den gelesenen
* Text in einem 'Buffer' speichern.
* b_copy_line, b_copy_text_block:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment