summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCedric BAIL <cedric.bail@free.fr>2012-06-29 10:45:58 +0000
committerCedric BAIL <cedric.bail@free.fr>2012-06-29 10:45:58 +0000
commitfaa4287716acd92d9ada8f711035b796835e9997 (patch)
tree039f4da867507b9e6cb11391c06133c46c7bd3d1
parent09eb6e340f18e4e834d028b44cf1edf99b4e6ca8 (diff)
downloadeina-faa4287716acd92d9ada8f711035b796835e9997.tar.gz
eina: also track lines index.
SVN revision: 73029
-rw-r--r--src/include/eina_file.h1
-rw-r--r--src/lib/eina_file.c10
2 files changed, 10 insertions, 1 deletions
diff --git a/src/include/eina_file.h b/src/include/eina_file.h
index 246410f..0518c12 100644
--- a/src/include/eina_file.h
+++ b/src/include/eina_file.h
@@ -204,6 +204,7 @@ struct _Eina_File_Lines
struct {
const char *start;
const char *end;
+ unsigned int index;
} line;
unsigned long long length;
};
diff --git a/src/lib/eina_file.c b/src/lib/eina_file.c
index 33137cc..b5dd5cd 100644
--- a/src/lib/eina_file.c
+++ b/src/lib/eina_file.c
@@ -1175,13 +1175,20 @@ static Eina_Bool
_eina_file_map_lines_iterator_next(Eina_Lines_Iterator *it, void **data)
{
const char *eol;
+ unsigned char match;
if (it->current.line.end >= it->end)
return EINA_FALSE;
+ match = *it->current.line.end;
while ((*it->current.line.end == '\n' || *it->current.line.end == '\r')
&& it->current.line.end < it->end)
- it->current.line.end++;
+ {
+ if (match == *it->current.line.end)
+ it->current.line.index++;
+ it->current.line.end++;
+ }
+ it->current.line.index++;
if (it->current.line.end == it->end)
return EINA_FALSE;
@@ -1246,6 +1253,7 @@ eina_file_map_lines(Eina_File *file)
it->boundary = 4096;
it->current.line.start = it->map;
it->current.line.end = it->current.line.start;
+ it->current.line.index = 0;
it->current.length = 0;
it->end = it->map + it->fp->length;