+static void
+skip_path_colors (const char *color_string, const char *file_string, const struct stat *sb)
+{
+ bool have_file;
+ unsigned int c;
+ const char *color = color_string;
+ const mode_t mode = sb->st_mode;
+
+ for (c = 1; c <= 2 && *color; c++)
+ {
+ bool matched = false;
+ unsigned int i;
+ for (i = 0; i < tables[FOREGROUND].count; i++)
+ {
+ const struct color *entry = &tables[FOREGROUND].entries[i];
+ if (has_color_name (color, entry->name))
+ {
+ color += strlen (entry->name);
+ matched = true;
+ break;
+ }
+ }
+ if (!matched && has_color_name (color, "random"))
+ {
+ color += strlen ("random");
+ matched = true;
+ }
+ if (matched && *color == COLOR_SEP_CHAR && *(color + 1))
+ color++;
+ else
+ break;
+ }
+
+ have_file = (*color != '\0');
+
+ if (have_file)
+ {
+ const char *file_exists = color_string;
+ if (file_string)
+ vfprintf_fail (formats[FMT_QUOTE], get_file_type (mode), file_exists, "cannot be used as color string");
+ else
+ {
+ if (VALID_FILE_TYPE (mode))
+ vfprintf_fail (formats[FMT_QUOTE], get_file_type (mode), file_exists, "must be preceeded by color string");
+ else
+ vfprintf_fail (formats[FMT_QUOTE], get_file_type (mode), file_exists, "is not a valid file type");
+ }
+ }
+}
+