X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=ETL%2Ftags%2Fstable%2FETL%2F_stringf.h;h=69627993cb45c9caffdaca59d415bd95af831399;hb=2431de3e401e81fb920d57b4c278bd2b156c277e;hp=b7026893cc1ce4f4d73447f45e6f12c47371657d;hpb=26d279453f9f77f36658584e5d2b3dbbdf56b761;p=synfig.git diff --git a/ETL/tags/stable/ETL/_stringf.h b/ETL/tags/stable/ETL/_stringf.h index b702689..6962799 100644 --- a/ETL/tags/stable/ETL/_stringf.h +++ b/ETL/tags/stable/ETL/_stringf.h @@ -40,6 +40,14 @@ #define ETL_STRPRINTF_MAX_LENGTH (800) #endif +#ifdef WIN32 +#define POPEN_BINARY_READ_TYPE "rb" +#define POPEN_BINARY_WRITE_TYPE "wb" +#else +#define POPEN_BINARY_READ_TYPE "r" +#define POPEN_BINARY_WRITE_TYPE "w" +#endif + /* === T Y P E D E F S ===================================================== */ _ETL_BEGIN_CDECLS @@ -190,14 +198,38 @@ dirname(const std::string &str) break; if(iter==str.begin()) + { if (*iter==ETL_DIRECTORY_SEPARATOR) return "/"; else return "."; + } return std::string(str.begin(),iter); } +// filename_extension("/f.e/d.c") => ".c" +inline std::string +filename_extension(const std::string &str) +{ + std::string base = basename(str); + std::string::size_type pos = base.find_last_of('.'); + if (pos == std::string::npos) return std::string(); + return base.substr(pos); +} + +// filename_sans_extension("/f.e/d.c") => "/f.e/d" +inline std::string +filename_sans_extension(const std::string &str) +{ + std::string base = basename(str); + std::string::size_type pos = base.find_last_of('.'); + if (pos == std::string::npos) return str; + std::string dir = dirname(str); + if (dir == ".") return base.substr(0,pos); + return dir + ETL_DIRECTORY_SEPARATOR + base.substr(0,pos); +} + inline bool is_absolute_path(const std::string &path) {