// Copyright (C) 2004 Davis E. King (davis@dlib.net) // License: Boost Software License See LICENSE.txt for the full license. #ifndef DLIB_MISC_API_KERNEL_2_CPp_ #define DLIB_MISC_API_KERNEL_2_CPp_ #include "../platform.h" #ifdef POSIX #include <unistd.h> #include "misc_api_kernel_2.h" #include <sys/time.h> #include <sys/stat.h> #include <sys/types.h> #include <errno.h> namespace dlib { // ---------------------------------------------------------------------------------------- void sleep ( unsigned long milliseconds ) { // in HP-UX you can only usleep for less than a second #ifdef HPUX if (milliseconds >= 1000) { ::sleep(milliseconds/1000); unsigned long remaining = milliseconds%1000; if (remaining > 0) ::usleep(remaining*1000); } else { ::usleep(milliseconds*1000); } #else ::usleep(milliseconds*1000); #endif } // ---------------------------------------------------------------------------------------- std::string get_current_dir ( ) { char buf[1024]; if (getcwd(buf,sizeof(buf)) == 0) { return std::string(); } else { return std::string(buf); } } // ---------------------------------------------------------------------------------------- void set_current_dir ( const std::string& new_dir ) { if (chdir(new_dir.c_str())) { throw set_current_dir_error("Error changing current dir to '" + new_dir + "'"); } } // ---------------------------------------------------------------------------------------- uint64 timestamper:: get_timestamp ( ) const { uint64 ts; timeval curtime; gettimeofday(&curtime,0); ts = curtime.tv_sec; ts *= 1000000; ts += curtime.tv_usec; return ts; } // ---------------------------------------------------------------------------------------- void create_directory ( const std::string& dir ) { if (mkdir(dir.c_str(),0777)) { // an error has occurred if (errno == EEXIST) { struct stat buffer; // now check that this is actually a valid directory if (::stat(dir.c_str(),&buffer)) { // the directory was not found throw dir_create_error(dir); } else if (S_ISDIR(buffer.st_mode) == 0) { // It is not a directory throw dir_create_error(dir); } } else { throw dir_create_error(dir); } } } // ---------------------------------------------------------------------------------------- } #endif // POSIX #endif // DLIB_MISC_API_KERNEL_2_CPp_