char buf[SIZEOF_STR] = "unknown error";
regerror(regex_err, &view->regex, buf, sizeof(buf));
- report("Search failed: %s", buf);;
+ report("Search failed: %s", buf);
return;
}
if (strcmp(view->vid, view->id))
opt_path[0] = 0;
- if (snprintf(view->cmd, sizeof(view->cmd), format, id, opt_path)
- >= sizeof(view->cmd))
+ if (!string_format(view->cmd, format, id, opt_path))
return FALSE;
} else {
char buf[SIZEOF_STR];
unsigned long pos;
enum line_type type;
+ bool first_read = view->lines == 0;
if (textlen <= SIZEOF_TREE_ATTR)
return FALSE;
type = text[STRING_SIZE("100644 ")] == 't'
? LINE_TREE_DIR : LINE_TREE_FILE;
- /* The first time around ... */
- if (!view->lines) {
+ if (first_read) {
/* Add path info line */
- if (snprintf(buf, sizeof(buf), "Directory path /%s", opt_path) < sizeof(buf) &&
+ if (string_format(buf, "Directory path /%s", opt_path) &&
realloc_lines(view, view->line_size + 1) &&
pager_read(view, buf))
view->line[view->lines - 1].type = LINE_DEFAULT;
/* Insert "link" to parent directory. */
if (*opt_path &&
- snprintf(buf, sizeof(buf), TREE_UP_FORMAT, view->ref) < sizeof(buf) &&
+ string_format(buf, TREE_UP_FORMAT, view->ref) &&
realloc_lines(view, view->line_size + 1) &&
pager_read(view, buf))
view->line[view->lines - 1].type = LINE_TREE_DIR;
if (!pager_read(view, text))
return FALSE;
+ /* Move the current line to the first tree entry. */
+ if (first_read)
+ view->lineno++;
+
view->line[view->lines - 1].type = type;
return TRUE;
}
} else {
size_t pathlen = strlen(opt_path);
+ size_t origlen = pathlen;
char *basename = data + SIZEOF_TREE_ATTR;
- string_format_from(opt_path, &pathlen, "%s/", basename);
+ if (string_format_from(opt_path, &pathlen, "%s/", basename)) {
+ opt_path[origlen] = 0;
+ return TRUE;
+ }
}
/* Trees and subtrees share the same ID, so they are not not
if (*opt_codeset && strcmp(opt_codeset, opt_encoding)) {
opt_iconv = iconv_open(opt_codeset, opt_encoding);
- if (opt_iconv == (iconv_t) -1)
+ if (opt_iconv == ICONV_NONE)
die("Failed to initialize character set conversion");
}