/* (C) 2003-2007 Willem Jan Hengeveld * Web: http://www.xs4all.nl/~itsme/ * http://wiki.xda-developers.com/ * * $Id: $ */ #include #include #include #include #include "debug.h" #include "args.h" #include "vectorutils.h" #include "stringutils.h" #include "csidlpaths.h" #define AT_NONEXISTANT 1 #define AT_ISDIRECTORY 2 #define AT_ISFILE 3 int getCeAttributes(const std::string& name) { DWORD dwAttr = CeGetFileAttributes( (WCHAR*)expand_csidl(ToWString(name)).c_str() ); if (0xFFFFFFFF == dwAttr) return AT_NONEXISTANT; if (dwAttr & FILE_ATTRIBUTE_DIRECTORY) return AT_ISDIRECTORY; return AT_ISFILE; } bool isCeDirectory(const std::string& name) { return getCeAttributes(name)==AT_ISDIRECTORY; } bool isCeFile(const std::string& name) { return getCeAttributes(name)==AT_ISFILE; } bool isCeNonExistant(const std::string& name) { return getCeAttributes(name)==AT_NONEXISTANT; } void usage() { printf("(C) 2003-2008 Willem jan Hengeveld itsme@xs4all.nl\n"); printf("Usage: pmv src [...] dst\n"); } int main( int argc, char *argv[]) { DebugStdOut(); StringList namelist; for (int i=1 ; i1 && !isCeDirectory(dst)) { debug("ERROR: dst must specify a directory\n"); usage(); CeRapiUninit(); return 1; } if (namelist.size()==1 && dst[0]!='/' && dst[0]!='\\') { // dst does not contain a slash -> rename: prefix src path to dst. std::string src= namelist.front(); std::string srcdir= src; size_t lastsl= srcdir.find_last_of("/\\"); if (lastsl==std::string::npos) { src= std::string("/")+src; dst= std::string("/")+dst; } else { srcdir.resize(lastsl); dst= srcdir + '/' + dst; } DWORD res= 0; if (!CeMoveFile(expand_csidl(ToWString(src)).c_str(), expand_csidl(ToWString(dst)).c_str())) { ceerror("CeMoveFile('%s', '%s')", src.c_str(), dst.c_str()); res = 1; } CeRapiUninit(); return res; } DWORD res= 0; for (StringList::iterator i= namelist.begin() ; i!=namelist.end(); ++i) { size_t lastsl= (*i).find_last_of("/\\"); std::string srcfile; if (lastsl!=std::string::npos) { srcfile= (*i).substr(lastsl+1); } else { srcfile= *i; } if (!CeMoveFile(expand_csidl(ToWString(*i)).c_str(), expand_csidl(ToWString(dst + '/' + srcfile)).c_str())) { ceerror("CeMoveFile('%s', '%s/%s')", (*i).c_str(), dst.c_str(), srcfile.c_str()); res= 1; } } CeRapiUninit(); return res; }