| 757 | } |
| 758 | |
| 759 | Directory::Directory(const ACE_TString& dirname, const ACE_TString& logical, |
| 760 | const Directory::Ptr& parent) |
| 761 | : parent_(parent) |
| 762 | , physical_dirname_(dirname) |
| 763 | , logical_dirname_(logical) |
| 764 | { |
| 765 | add_slash(physical_dirname_); |
| 766 | |
| 767 | bool ok(true); |
| 768 | DDS_Dirent dir; |
| 769 | |
| 770 | if (dir.open(physical_dirname_.c_str()) == -1) { |
| 771 | ok = false; |
| 772 | |
| 773 | if (errno == ENOENT && dds_mkdir(physical_dirname_.c_str()) != -1 |
| 774 | && dir.open(physical_dirname_.c_str()) != -1) { |
| 775 | ok = true; |
| 776 | } |
| 777 | } |
| 778 | |
| 779 | if (!ok) throw std::runtime_error("Can't open or create directory"); |
| 780 | |
| 781 | scan_dir(ACE_TEXT(""), dir, 0); |
| 782 | } |
| 783 | |
| 784 | void Directory::scan_dir(const ACE_TString& relative, DDS_Dirent& dir, |
| 785 | unsigned int overflow_index) |