acl/app/iconv/main.cpp
2017-03-13 22:57:46 +08:00

97 lines
1.8 KiB
C++

#include "stdafx.h"
#include "charset_transfer.h"
static void usage(const char* procname)
{
printf("usage: %s -h [help]\r\n"
" -f from_charset\r\n"
" -t to_charset\r\n"
" -b [when to_charset is utf-8 if BOM header be added]\r\n"
" -s source_dir\r\n"
" -d destination_dir\r\n"
" -c [just check charset only]\r\n",
procname);
}
int main(int argc, char* argv[])
{
int ch;
acl::string from_charset, to_charset, from_dir, to_dir;
bool use_bom = false, check_only = false;;
while ((ch = getopt(argc, argv, "hf:t:bs:d:c")) > 0)
{
switch (ch)
{
case 'h':
usage(argv[0]);
return 0;
case 'f':
from_charset = optarg;
break;
case 't':
to_charset = optarg;
break;
case 'b':
use_bom = true;
break;
case 's':
from_dir = optarg;
break;
case 'd':
to_dir = optarg;
break;
case 'c':
check_only = true;
break;
default:
break;
}
}
acl::log::stdout_open(true);
if (check_only)
{
if (from_dir.empty() || from_charset.empty())
{
printf("from_charset or from_dir not set\r\n");
return 1;
}
int n = charset_transfer::check_path(from_dir, from_charset);
printf("check over: %d, charset: %s\r\n",
n, from_charset.c_str());
return 0;
}
if (from_charset.empty() || to_charset.empty()
|| from_dir.empty() || to_dir.empty())
{
usage(argv[0]);
return 0;
}
if (chdir(from_dir.c_str()) == -1)
{
logger_error("chdir to %s error %s", from_dir.c_str(),
acl::last_serror());
return -1;
}
charset_transfer transfer;
transfer.set_from_charset(from_charset)
.set_to_charset(to_charset)
.set_from_path(".")
.set_to_path(to_dir)
.set_utf8bom(use_bom);
int n = transfer.transfer();
printf("transfer over: %d, from_charset: %s, to_charset: %s,"
" from_path: %s, to_path: %s\r\n", n, from_charset.c_str(),
to_charset.c_str(), from_dir.c_str(), to_dir.c_str());
return 0;
}