| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- //
- // Path_WIN32U.cpp
- //
- // $Id: //poco/1.4/Foundation/src/Path_WINCE.cpp#1 $
- //
- // Library: Foundation
- // Package: Filesystem
- // Module: Path
- //
- // Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
- // and Contributors.
- //
- // SPDX-License-Identifier: BSL-1.0
- //
- #include "Poco/Path_WINCE.h"
- #include "Poco/Environment_WINCE.h"
- #include "Poco/UnicodeConverter.h"
- #include "Poco/Buffer.h"
- #include "Poco/Environment.h"
- #include "Poco/Exception.h"
- #include "Poco/UnWindows.h"
- namespace Poco {
- std::string PathImpl::currentImpl()
- {
- return("\\");
- }
- std::string PathImpl::homeImpl()
- {
- return("\\");
- }
- std::string PathImpl::systemImpl()
- {
- return("\\");
- }
- std::string PathImpl::nullImpl()
- {
- return "NUL:";
- }
- std::string PathImpl::tempImpl()
- {
- return "\\Temp\\";
- }
- std::string PathImpl::expandImpl(const std::string& path)
- {
- std::string result;
- std::string::const_iterator it = path.begin();
- std::string::const_iterator end = path.end();
- while (it != end)
- {
- if (*it == '%')
- {
- ++it;
- if (it != end && *it == '%')
- {
- result += '%';
- }
- else
- {
- std::string var;
- while (it != end && *it != '%') var += *it++;
- if (it != end) ++it;
- result += Environment::get(var, "");
- }
- }
- else result += *it++;
- }
- return result;
- }
- void PathImpl::listRootsImpl(std::vector<std::string>& roots)
- {
- roots.clear();
- roots.push_back("\\");
- WIN32_FIND_DATAW fd;
- HANDLE hFind = FindFirstFileW(L"\\*.*", &fd);
- if (hFind != INVALID_HANDLE_VALUE)
- {
- do
- {
- if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
- (fd.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY))
- {
- std::wstring name(fd.cFileName);
- name += L"\\Vol:";
- HANDLE h = CreateFileW(name.c_str(), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
- if (h != INVALID_HANDLE_VALUE)
- {
- // its a device volume
- CloseHandle(h);
- std::string name;
- UnicodeConverter::toUTF8(fd.cFileName, name);
- std::string root = "\\" + name;
- roots.push_back(root);
- }
- }
- }
- while (FindNextFileW(hFind, &fd));
- FindClose(hFind);
- }
- }
- } // namespace Poco
|