/*!
	UTF-8 → Unicode 実装

	@param[in] bCESU8Mode CESU-8 を処理する場合 true
*/
int CUtf8::Utf8ToUni( const char* pSrc, const int nSrcLen, wchar_t* pDst, bool bCESU8Mode )
{
	const unsigned char *pr, *pr_end;
	unsigned short *pw;
	int nclen;
	ECharSet echarset;

	if( nSrcLen < 1 ){
		return 0;
	}

	pr = reinterpret_cast<const unsigned char*>(pSrc);
	pr_end = reinterpret_cast<const unsigned char*>(pSrc+nSrcLen);
	pw = reinterpret_cast<unsigned short*>(pDst);

	for( ; ; ){

		// 文字をチェック
		if( bCESU8Mode != true ){
			nclen = CheckUtf8Char( reinterpret_cast<const char*>(pr), pr_end-pr, &echarset, true, 0 );
		}else{
			nclen = CheckCesu8Char( reinterpret_cast<const char*>(pr), pr_end-pr, &echarset, 0 );
		}
		if( nclen < 1 ){
			break;
		}

		// 変換
		if( echarset != CHARSET_BINARY ){
			pw += _Utf8ToUni_char( pr, nclen, pw, bCESU8Mode );
			pr += nclen;
		}else{
			if( nclen != 1 ){	// 保護コード
				nclen = 1;
			}
			pw += BinToText( pr, 1, pw );
			++pr;
		}
	}

	return pw - reinterpret_cast<unsigned short*>(pDst);
}
/*!
	EUCJP → Unicode 変換関数
*/
int CEuc::EucjpToUni( const char* pSrc, const int nSrcLen, wchar_t* pDst, bool* pbError )
{
	const unsigned char *pr, *pr_end;
	unsigned short *pw;
	int nclen;
	ECharSet echarset;
	bool berror_tmp, berror=false;

	if( nSrcLen < 1 ){
		if( pbError ){
			*pbError = false;
		}
		return 0;
	}

	pr = reinterpret_cast<const unsigned char*>(pSrc);
	pr_end = reinterpret_cast<const unsigned char*>(pSrc + nSrcLen);
	pw = reinterpret_cast<unsigned short*>(pDst);

	for( ; (nclen = CheckEucjpChar(reinterpret_cast<const char*>(pr), pr_end-pr, &echarset)) != 0; pr += nclen ){
		switch( echarset ){
		case CHARSET_ASCII7:
			// 保護コード
			if( nclen != 1 ){
				nclen = 1;
			}
			// 7-bit ASCII の変換
			*pw = *pr;
			++pw;
			break;
		case CHARSET_JIS_HANKATA:
		case CHARSET_JIS_ZENKAKU:
			// 保護コード
			if( echarset == CHARSET_JIS_HANKATA && nclen != 2 ){
				nclen = 2;
			}
			if( echarset == CHARSET_JIS_ZENKAKU && nclen != 2 ){
				nclen = 2;
			}
			// 全角文字・半角カタカナ文字の変換
			pw += _EucjpToUni_char( pr, pw, echarset, &berror_tmp );
			if( berror_tmp == true ){
				berror = true;
			}
			break;
		default:// case CHARSET_BINARY:
			// 保護コード
			if( nclen != 1 ){
				nclen = 1;
			}
			// 読み込みエラーになった文字を PUA に対応づける
			pw += BinToText( pr, nclen, pw );
		}
	}

	if( pbError ){
		*pbError = berror;
	}

	return pw - reinterpret_cast<unsigned short*>(pDst);
}
Example #3
0
static BOOL CheckKeyUseTime(AVP_dword* keynumber, AVP_dword life, SYSTEMTIME& st, AVP_dword* PLPIfTrial)
 {
  tm tm_cur;
  time_t tt_cur;
  time_t tt_first;

  time(&tt_cur);
  if(NULL==gmtime(&tt_cur)) return TRUE;
  tm_cur=*gmtime(&tt_cur);
  tt_first = tt_cur;

//  DWORD disp;
//  HKEY hKey;
//  if(ERROR_SUCCESS==RegCreateKeyEx(HKEY_CLASSES_ROOT,"LK.Auto",0,REG_NONE,REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL,&hKey,&disp))
   {
    char res[0x200];
    res[BinToText(keynumber,3*sizeof(AVP_dword),res,0x200)]=0;
//    DWORD type=REG_BINARY;
    DWORD size=sizeof(time_t);
//    if(ERROR_SUCCESS!=RegQueryValueEx(hKey,res,NULL,&type,(LPBYTE)&tt_first,&size))
//               RegSetValueEx(hKey,res,NULL,type,(LPBYTE)&tt_first,size);
    if(PLPIfTrial)
     {
      res[BinToText(PLPIfTrial,sizeof(AVP_dword),res,0x200)]=0;
//      type=REG_BINARY;
      size=sizeof(time_t);
//      if(ERROR_SUCCESS!=RegQueryValueEx(hKey,res,NULL,&type,(LPBYTE)&tt_first,&size))
//                    RegSetValueEx(hKey,res,NULL,type,(LPBYTE)&tt_first,size);
     }

//    RegCloseKey(hKey);
   }

  tt_first+=life*60*60*24;
  if(gmtime(&tt_first))
   {
    tm tm_first=*gmtime(&tt_first);
    tm_first.tm_year+=1900;
    tm_first.tm_mon+=1;
    if(st.wYear>tm_first.tm_year)
     {
      st.wYear=(unsigned short)tm_first.tm_year;
      st.wMonth=(unsigned char)tm_first.tm_mon;
      st.wDay=(unsigned char)tm_first.tm_mday;
     }
    else
     if(st.wYear==tm_first.tm_year)
      {
       if(st.wMonth>tm_first.tm_mon)
        {
         st.wMonth=(unsigned char)tm_first.tm_mon;
         st.wDay=(unsigned char)tm_first.tm_mday;
        }
       else
        if(st.wMonth==tm_first.tm_mon)
         {
          if(st.wDay>tm_first.tm_mday)
                  st.wDay=(unsigned char)tm_first.tm_mday;
         }
      }
   }

  if(difftime(tt_cur,tt_first)>0) return FALSE;
  return TRUE;
 }