summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 2fba3c2)
raw | patch | inline | side by side (parent: 2fba3c2)
author | Jonas Fonseca <fonseca@diku.dk> | |
Thu, 15 Jan 2009 14:24:39 +0000 (15:24 +0100) | ||
committer | Jonas Fonseca <fonseca@diku.dk> | |
Thu, 15 Jan 2009 15:04:09 +0000 (16:04 +0100) |
tig.c | patch | blob | history |
index 3df53a49f97591db0634bb1ea6f45ab8bb31858b..b0524651934b854e6a18533e8a2cdddda55c356f 100644 (file)
--- a/tig.c
+++ b/tig.c
#define TREE_UP_FORMAT "040000 tree %s\t.."
-static int
-tree_compare_entry(enum line_type type1, const char *name1,
- enum line_type type2, const char *name2)
-{
- if (type1 != type2) {
- if (type1 == LINE_TREE_DIR)
- return -1;
- return 1;
- }
-
- return strcmp(name1, name2);
-}
-
static const char *
tree_path(struct line *line)
{
return path + SIZEOF_TREE_ATTR;
}
+static int
+tree_compare_entry(struct line *line1, struct line *line2)
+{
+ if (line1->type != line2->type)
+ return line1->type == LINE_TREE_DIR ? -1 : 1;
+ return strcmp(tree_path(line1), tree_path(line2));
+}
+
static bool
tree_read(struct view *view, char *text)
{
size_t textlen = text ? strlen(text) : 0;
- size_t pos;
+ struct line *entry, *line;
enum line_type type;
if (!text)
return FALSE;
}
- if (!add_line_text(view, text, type))
+ entry = add_line_text(view, text, type);
+ if (!entry)
return FALSE;
- text = view->line[view->lines - 1].data;
+ text = entry->data;
/* Skip "Directory ..." and ".." line. */
- for (pos = 1 + !!*opt_path; pos < view->lines - 1; pos++) {
- struct line *line = &view->line[pos];
- const char *path1 = tree_path(line);
- char *path2 = text + SIZEOF_TREE_ATTR;
- int cmp = tree_compare_entry(line->type, path1, type, path2);
-
- if (cmp <= 0)
+ for (line = &view->line[1 + !!*opt_path]; line < entry; line++) {
+ if (tree_compare_entry(line, entry) <= 0)
continue;
- if (view->lines - 1 > pos)
- memmove(&view->line[pos + 1], &view->line[pos],
- (view->lines - 1 - pos) * sizeof(*line));
+ memmove(line + 1, line, (entry - line) * sizeof(*entry));
- line = &view->line[pos];
line->data = text;
line->type = type;
return TRUE;