+ File_name file_name (name);
+ if (name.is_empty () || name == "-")
+ file_name.base_ = "-";
+ else
+ {
+ String orig_ext = file_name.ext_;
+ for (int i = 0; extensions[i]; i++)
+ {
+ file_name.ext_ = orig_ext;
+ if (*extensions[i] && !file_name.ext_.is_empty ())
+ file_name.ext_ += ".";
+ file_name.ext_ += extensions[i];
+ if (!find (file_name.to_string ()).is_empty ())
+ break;
+ }
+ /* Reshuffle extension */
+ file_name = File_name (file_name.to_string ());
+ }
+ return file_name.to_string ();
+}
+
+/** Append a directory, return false if failed. */
+bool
+File_path::try_append (String s)
+{
+ if (s == "")
+ s = ".";
+ if (FILE *f = fopen (s.to_str0 (), "r"))
+ {
+ fclose (f);
+ append (s);
+ return true;
+ }
+ return false;
+}
+
+String
+File_path::to_string () const
+{
+ String s;
+ int n = size ();
+ for (int i = 0; i < n; i++)
+ {
+ s = s + elem (i);
+ if (i < n - 1)
+ s += ":";
+ }
+ return s;