2 // Inclusion of standard header file
15 // Inclusion of system header file
18 #include <sys/types.h>
24 // Inclusion of library header file
26 #include <boost/filesystem/path.hpp>
29 // Inclusion of local header file
31 #include "fatal_error.hpp"
32 #include "islibfunc.hpp"
33 #include "system_error.hpp"
38 // Definition of function
43 boost::filesystem::path const &source_file_path,
44 boost::filesystem::path const &destination_file_path
52 boost::filesystem::path const &source_file_path_,
53 boost::filesystem::path const &destination_file_path_
56 throw_if ( std::invalid_argument ( "islib::link_: source_file_path_.empty ()" ), source_file_path_.empty () );
57 throw_if ( std::invalid_argument ( "islib::link_: destination_file_path_.empty ()" ), destination_file_path_.empty () );
67 a_local ( source_file_path, destination_file_path );
69 int link_return_value = link ( source_file_path.string ().c_str (), destination_file_path.string ().c_str () );
71 if ( link_return_value != 0 )
73 int const saved_errno = errno;
74 char buffer [ BUFSIZ ];
75 std::stringstream system_error_message_stream;
77 system_error_message_stream << "islib::link_: link: " << strerror_r ( saved_errno, buffer, BUFSIZ );
79 throw_ ( system_error ( system_error_message_stream.str () ) );
84 // Definition of function
89 std::time_t const * const time,
90 struct std::tm * const time_information
98 std::time_t const * const time_,
99 struct std::tm * const time_information_
102 throw_if ( std::invalid_argument ( "islib::localtime_r_: !time_" ), !time_ );
103 throw_if ( std::invalid_argument ( "islib::localtime_r_: !time_information_" ), !time_information_ );
113 a_local ( time, time_information );
115 struct tm * const localtime_r_return_value = localtime_r ( time, time_information );
117 if ( localtime_r_return_value == 0 )
119 int const saved_errno = errno;
120 char buffer [ BUFSIZ ];
121 std::stringstream system_error_message_stream;
123 system_error_message_stream << "islib::localtime_r_: std::localtime_r: " << strerror_r ( saved_errno, buffer, BUFSIZ );
125 throw_ ( system_error ( system_error_message_stream.str () ) );
130 // Definition of function
135 boost::filesystem::path const &directory_path,
144 boost::filesystem::path const &directory_path_
147 throw_if ( std::invalid_argument ( "islib::mkdir_: directory_path_.empty ()" ), directory_path_.empty () );
157 a_local ( directory_path );
159 int mkdir_return_value = mkdir ( directory_path.string ().c_str (), mode );
161 if ( mkdir_return_value != 0 )
163 int const saved_errno = errno;
164 char buffer [ BUFSIZ ];
165 std::stringstream system_error_message_stream;
167 system_error_message_stream << "islib::mkdir_: mkdir: " << strerror_r ( saved_errno, buffer, BUFSIZ );
169 throw_ ( system_error ( system_error_message_stream.str () ) );
174 // Definition of function
179 int const signal_number
187 int const signal_number_
190 throw_if ( std::invalid_argument ( "islib::raise_: signal_number_ < 1 || _NSIG <= signal_number_" ), signal_number_ < 1 || _NSIG <= signal_number_ );
200 a_local ( signal_number );
202 int const raise_return_value = raise ( signal_number );
204 if ( raise_return_value != 0 )
206 int const saved_errno = errno;
207 char buffer [ BUFSIZ ];
208 std::stringstream system_error_message_stream;
210 system_error_message_stream << "islib::raise_: raise: " << strerror_r ( saved_errno, buffer, BUFSIZ );
212 throw_ ( system_error ( system_error_message_stream.str () ) );
217 // Definition of function
222 int const signal_number
230 int const signal_number_
233 throw_if ( fatal_error ( "islib::raise_fatal: signal_number_ < 1 || _NSIG <= signal_number_" ), signal_number_ < 1 || _NSIG <= signal_number_ );
243 a_local ( signal_number );
245 int const raise_return_value = raise ( signal_number );
247 if ( raise_return_value != 0 )
248 throw_ ( fatal_error ( "islib::raise_fatal: raise: fatal error." ) );
252 // Definition of function
257 int const signal_number,
258 struct sigaction const * const signal_action,
259 struct sigaction * const old_signal_action
267 int const signal_number_,
268 struct sigaction const * const signal_action_
271 throw_if ( std::invalid_argument ( "islib::sigaction_: signal_number_ < 1 || _NSIG <= signal_number_" ), signal_number_ < 1 || _NSIG <= signal_number_ );
272 throw_if ( std::invalid_argument ( "islib::sigaction_: !signal_action_" ), !signal_action_ );
282 a_local ( signal_number, signal_action );
284 int const sigaction_return_value = sigaction ( signal_number, signal_action, old_signal_action );
286 if ( sigaction_return_value != 0 )
288 int const saved_errno = errno;
289 char buffer [ BUFSIZ ];
290 std::stringstream system_error_message_stream;
292 system_error_message_stream << "islib::sigaction_: sigaction: " << strerror_r ( saved_errno, buffer, BUFSIZ );
294 throw_ ( system_error ( system_error_message_stream.str () ) );
299 // Definition of function
304 int const signal_number,
305 struct sigaction const * const signal_action,
306 struct sigaction * const old_signal_action
314 int const signal_number_,
315 struct sigaction const * const signal_action_
318 throw_if ( fatal_error ( "islib::sigaction_fatal: signal_number_ < 1 || _NSIG <= signal_number_" ), signal_number_ < 1 || _NSIG <= signal_number_ );
319 throw_if ( fatal_error ( "islib::sigaction_fatal: !signal_action_" ), !signal_action_ );
329 a_local ( signal_number, signal_action );
331 int const sigaction_return_value = sigaction ( signal_number, signal_action, old_signal_action );
333 if ( sigaction_return_value != 0 )
334 throw_ ( fatal_error ( "islib::sigaction_fatal: sigaction: fatal error." ) );
338 // Definition of function
343 sigset_t * const signal_set
351 sigset_t * const signal_set_
354 throw_if ( std::invalid_argument ( "islib::sigfillset_: !signal_set_" ), !signal_set_ );
364 a_local ( signal_set );
366 int const sigfillset_return_value = sigfillset ( signal_set );
368 if ( sigfillset_return_value != 0 )
370 int const saved_errno = errno;
371 char buffer [ BUFSIZ ];
372 std::stringstream system_error_message_stream;
374 system_error_message_stream << "islib::sigfillset_: sigfillset: " << strerror_r ( saved_errno, buffer, BUFSIZ );
376 throw_ ( system_error ( system_error_message_stream.str () ) );
381 // Definition of function
386 sigset_t * const signal_set
394 sigset_t * const signal_set_
397 throw_if ( fatal_error ( "islib::sigfillset_fatal: !signal_set_" ), !signal_set_ );
407 a_local ( signal_set );
409 int const sigfillset_return_value = sigfillset ( signal_set );
411 if ( sigfillset_return_value != 0 )
412 throw_ ( fatal_error ( "islib::sigfillset_fatal: sigfillset: fatal error." ) );
416 // Definition of function
422 sigset_t const * const signal_set,
423 sigset_t * const old_signal_set
432 sigset_t const * const signal_set_
435 throw_if ( std::invalid_argument ( "islib::sigprocmask_: mode_ != SIG_BLOCK && mode_ != SIG_UNBLOCK && mode_ != SIG_SETMASK" ), mode_ != SIG_BLOCK && mode_ != SIG_UNBLOCK && mode_ != SIG_SETMASK );
436 throw_if ( std::invalid_argument ( "islib::sigprocmask_: !signal_set_" ), !signal_set_ );
446 a_local ( mode, signal_set );
448 int const sigprocmask_return_value = sigprocmask ( mode, signal_set, old_signal_set );
450 if ( sigprocmask_return_value != 0 )
452 int const saved_errno = errno;
453 char buffer [ BUFSIZ ];
454 std::stringstream system_error_message_stream;
456 system_error_message_stream << "islib::sigprocmask_: sigprocmask: " << strerror_r ( saved_errno, buffer, BUFSIZ );
458 throw_ ( system_error ( system_error_message_stream.str () ) );
463 // Definition of function
469 sigset_t const * const signal_set,
470 sigset_t * const old_signal_set
479 sigset_t const * const signal_set_
482 throw_if ( fatal_error ( "islib::sigprocmask_fatal: mode_ != SIG_BLOCK && mode_ != SIG_UNBLOCK && mode_ != SIG_SETMASK" ), mode_ != SIG_BLOCK && mode_ != SIG_UNBLOCK && mode_ != SIG_SETMASK );
483 throw_if ( fatal_error ( "islib::sigprocmask_fatal_: !signal_set_" ), !signal_set_ );
493 a_local ( mode, signal_set );
495 int const sigprocmask_return_value = sigprocmask ( mode, signal_set, old_signal_set );
497 if ( sigprocmask_return_value != 0 )
498 throw_ ( fatal_error ( "islib::sigprocmask_fatal: sigprocmask: fatal error." ) );
502 // Definition of function
507 boost::filesystem::path const &path,
508 struct stat * const status_information
516 boost::filesystem::path const &path_,
517 struct stat * const status_information_
520 throw_if ( std::invalid_argument ( "islib::stat_: path_.empty ()" ), path_.empty () );
521 throw_if ( std::invalid_argument ( "islib::stat_: !status_information_" ), !status_information_ );
531 a_local ( path, status_information );
533 int const stat_return_value = stat ( path.string ().c_str (), status_information );
535 if ( stat_return_value != 0 )
537 int const saved_errno = errno;
538 char buffer [ BUFSIZ ];
539 std::stringstream system_error_message_stream;
541 system_error_message_stream << "islib::stat_: stat: " << strerror_r ( saved_errno, buffer, BUFSIZ );
543 throw_ ( system_error ( system_error_message_stream.str () ) );
548 // Definition of function
557 std::time_t time_return_value = std::time ( &time_ );
559 if ( time_return_value == -1 )
561 int const saved_errno = errno;
562 char buffer [ BUFSIZ ];
563 std::stringstream system_error_message_stream;
565 system_error_message_stream << "islib::time: std::time: " << strerror_r ( saved_errno, buffer, BUFSIZ );
567 throw_ ( system_error ( system_error_message_stream.str () ) );
574 // Definition of function
579 boost::filesystem::path const &file_path
587 boost::filesystem::path const &file_path_
590 throw_if ( std::invalid_argument ( "islib::unlink_: file_path_.empty ()" ), file_path_.empty () );
600 a_local ( file_path );
602 int unlink_return_value = unlink ( file_path.string ().c_str () );
604 if ( unlink_return_value != 0 )
606 int const saved_errno = errno;
607 char buffer [ BUFSIZ ];
608 std::stringstream system_error_message_stream;
610 system_error_message_stream << "islib::unlink_: unlink: " << strerror_r ( saved_errno, buffer, BUFSIZ );
612 throw_ ( system_error ( system_error_message_stream.str () ) );
617 // Definition of function
622 boost::filesystem::path const &path,
623 struct utimbuf const * const utime_information
631 boost::filesystem::path const &path_,
632 struct utimbuf const * const utime_information_
635 throw_if ( std::invalid_argument ( "islib::utime_: path_.empty ()" ), path_.empty () );
636 throw_if ( std::invalid_argument ( "islib::utime_: !utime_information_" ), !utime_information_ );
646 a_local ( path, utime_information );
648 int utime_return_value = utime ( path.string ().c_str (), utime_information );
650 if ( utime_return_value != 0 )
652 int const saved_errno = errno;
653 char buffer [ BUFSIZ ];
654 std::stringstream system_error_message_stream;
656 system_error_message_stream << "islib::utime_: utime: " << strerror_r ( saved_errno, buffer, BUFSIZ );
658 throw_ ( system_error ( system_error_message_stream.str () ) );
663 // Definition of function
668 int const file_descriptor,
670 std::size_t const number_of_bytes
678 int const file_descriptor_,
682 throw_if ( std::invalid_argument ( "islib::write_: file_descriptor_ < 0" ), file_descriptor_ < 0 );
683 throw_if ( std::invalid_argument ( "islib::write_: !buffer_" ), !buffer_ );
693 a_local ( file_descriptor, buffer );
695 ssize_t const write_return_value = write ( file_descriptor, buffer, number_of_bytes );
697 if ( write_return_value == -1 )
699 int const saved_errno = errno;
700 char buffer_ [ BUFSIZ ];
701 std::stringstream system_error_message_stream;
703 system_error_message_stream << "islib::write_: write: " << strerror_r ( saved_errno, buffer_, BUFSIZ );
705 throw_ ( system_error ( system_error_message_stream.str () ) );
710 // Definition of function
715 int const file_descriptor,
717 std::size_t const number_of_bytes
725 int const file_descriptor_,
729 throw_if ( fatal_error ( "islib::write_: file_descriptor_ < 0" ), file_descriptor_ < 0 );
730 throw_if ( fatal_error ( "islib::write_: !buffer_" ), !buffer_ );
740 a_local ( file_descriptor, buffer );
742 ssize_t const write_return_value = write ( file_descriptor, buffer, number_of_bytes );
744 assert_ ( write_return_value != -1, "islib::write_: `write_return_value != -1' has failed." );
748 // Definition of specialized template function
762 double const &permissible_error
765 return std::fabs ( x - y ) <= permissible_error;
769 // Definition of specialized template function
783 double const &permissible_error
786 return std::fabs ( x - y ) > permissible_error;
790 // Definition of specialized template function
804 double const &permissible_error
807 return y - x > permissible_error;
811 // Definition of specialized template function
825 double const &permissible_error
828 return x - y > permissible_error;
832 // Definition of specialized template function
838 is_less_than_or_equals_to
846 double const &permissible_error
849 return x - y <= permissible_error;
853 // Definition of specialized template function
857 is_greater_than_or_equals_to
865 double const &permissible_error
868 return y - x <= permissible_error;