#include <cstdio>
#include <cerrno>
+#include <unistd.h>
+
using namespace std;
#include "config.hh"
#endif
#ifdef __CYGWIN__
-static Std_string
-dos_to_posix (Std_string file_name)
+static string
+dos_to_posix (string file_name)
{
char buf[PATH_MAX] = "";
- char *s = file_name.get_copy_str0 ();
+ char s[PATH_MAX];
+ file_name.copy (s, PATH_MAX - 1);
/* ugh: char const* argument gets modified. */
int fail = cygwin_conv_to_posix_path (s, buf);
- delete s;
if (!fail)
return buf;
return file_name;
}
#endif /* __CYGWIN__ */
-#ifdef __MINGW32__
/** Use slash as directory separator. On Windows, they can pretty
much be exchanged. */
-static Std_string
-slashify (Std_string file_name)
+#if 0
+static /* avoid warning */
+#endif
+string
+slashify (string file_name)
{
- file_name.substitute ('\\', '/');
- file_name.substitute ("//", "/");
+ replace_all (file_name, '\\', '/');
+ replace_all (file_name, string ("//"), "/");
return file_name;
}
-#endif /* __MINGW32__ */
+
+string
+dir_name (string const file_name)
+{
+ string s = file_name;
+ s = slashify (s);
+ ssize n = s.length ();
+ if (n && s[n - 1] == '/')
+ s[n - 1] = 0;
+ s = s.substr (0, s.rfind ('/'));
+ return s;
+}
+
+string
+get_working_directory ()
+{
+ char cwd[PATH_MAX];
+ getcwd (cwd, PATH_MAX);
+
+ return string (cwd);
+}
/* Join components to full file_name. */
-Std_string
+string
File_name::to_string () const
{
- Std_string s;
+ string s;
if (!root_.empty ())
- s = root_ + ::to_std_string (ROOTSEP);
+ s = root_ + ::to_string (ROOTSEP);
if (!dir_.empty ())
{
s += dir_;
if (!base_.empty () || !ext_.empty ())
- s += ::to_std_string (DIRSEP);
+ s += ::to_string (DIRSEP);
}
s += base_;
if (!ext_.empty ())
- s += ::to_std_string (EXTSEP) + ext_;
+ s += ::to_string (EXTSEP) + ext_;
return s;
}
-File_name::File_name (Std_string file_name)
+File_name::File_name (string file_name)
{
#ifdef __CYGWIN__
/* All system functions would work, even if we do not convert to
file_name = slashify (file_name);
#endif
- int i = file_name.find (ROOTSEP);
+ ssize i = file_name.find (ROOTSEP);
if (i != NPOS)
{
root_ = file_name.substr (0, i);
return (dir_.length () && dir_[0] == DIRSEP) || root_.length ();
}
-#if 0 //STD_STRING
-File_name::File_name (String file_name)
-{
- *this = File_name (Std_string (file_name));
-}
-#endif