// 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 DLIB_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 // DLIB_POSIX
#endif // DLIB_MISC_API_KERNEL_2_CPp_