/////////////////////////////////////////////////////////////////////////////
// CProfileSection
-STDMETHODIMP CProfileSection::InterfaceSupportsErrorInfo(REFIID riid)
-{
- static const IID* arr[] =
- {
- &IID_ISeraphyScriptTools_ProfileSection
- };
- for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
- {
- if (IsEqualGUID(*arr[i],riid))
- return S_OK;
- }
- return S_FALSE;
-}
-
STDMETHODIMP CProfileSection::get_Value(VARIANT idx, VARIANT *pVal)
{
::VariantInit(pVal);
+
+ ATL::CString szKeyname;
CComVariant varIdx;
- CHAR szKeyname[MAX_PATH] = { 0 };
- const int siz = 1024 * 8; // 8KBytes
- LPSTR szReturn = new CHAR[siz];
- if(varIdx.ChangeType(VT_BSTR,&idx) == S_OK){
- WideCharToMultiByte(GetACP(),0,varIdx.bstrVal,-1,szKeyname,MAX_PATH,NULL,NULL);
+ if (SUCCEEDED(varIdx.ChangeType(VT_BSTR, &idx))) {
+ szKeyname = varIdx.bstrVal;
}
- if(GetPrivateProfileString(m_szSectionName,szKeyname,"",szReturn,siz,m_szProfilePath)){
- CComVariant ret((LPCSTR)szReturn);
- ret.Detach(pVal);
+
+ DWORD siz = 1024 * 8; // 8KBytes
+ while (siz < 10 * 1024 * 1024) { // 10MBytes\82Ü\82Å
+ ATL::CString buf;
+ LPTSTR szReturn = buf.GetBufferSetLength(siz);
+ DWORD rdsiz = GetPrivateProfileString(
+ m_szSectionName, szKeyname, _TEXT(""), szReturn, siz, m_szProfilePath);
+ if (rdsiz >= siz - 2) {
+ // \83o\83b\83t\83@\83I\81[\83o\81[\82µ\82Ä\82¢\82é\89Â\94\\90«\82ª\82 \82é\82½\82ß\83o\83b\83t\83@\82ð\91å\82«\82\82µ\82Ä\8dÄ\8e\8e\8ds\82·\82é
+ siz *= 2;
+ continue;
+ }
+ CComVariant ret(szReturn);
+ return ret.Detach(pVal);
}
- delete[]szReturn;
- return S_OK;
+ return E_OUTOFMEMORY;
}
STDMETHODIMP CProfileSection::put_Value(VARIANT idx, VARIANT newVal)
{
// \83f\83B\83t\83H\83\8b\83g\82Ì\92l\82Â\82«\8eæ\93¾
- CComVariant varIdx,varNew;
- CHAR szKeyname[MAX_PATH] = { 0 };
- const int siz = 1024 * 8; // 8KBytes
- LPSTR szWrite = new CHAR[siz+1];
- if(varIdx.ChangeType(VT_BSTR,&idx) == S_OK){
- WideCharToMultiByte(GetACP(),0,varIdx.bstrVal,-1,szKeyname,MAX_PATH,NULL,NULL);
+
+ ATL::CString szKeyname;
+ CComVariant varIdx;
+ if (SUCCEEDED(varIdx.ChangeType(VT_BSTR, &idx))) {
+ szKeyname = varIdx.bstrVal;
}
- if(varNew.ChangeType(VT_BSTR,&newVal) == S_OK){
- int cnt = WideCharToMultiByte(GetACP(),0,varNew.bstrVal,-1,szWrite,siz,NULL,NULL);
- szWrite[cnt] = 0;
+
+ ATL::CString szWrite;
+ CComVariant varNew;
+ if (SUCCEEDED(varNew.ChangeType(VT_BSTR, &newVal))) {
+ szWrite = varNew.bstrVal;
}
- WritePrivateProfileString(m_szSectionName,szKeyname,szWrite,m_szProfilePath);
- delete[]szWrite;
+
+ WritePrivateProfileString(
+ m_szSectionName, szKeyname, szWrite, m_szProfilePath);
return S_OK;
}
-STDMETHODIMP CProfileSection::GetValue(VARIANT idx, VARIANT def,VARIANT* pVal)
+STDMETHODIMP CProfileSection::GetValue(VARIANT idx, VARIANT def, VARIANT* pVal)
{
// \83f\83B\83t\83H\83\8b\83g\82Ì\92l\82Â\82«\8eæ\93¾
::VariantInit(pVal);
- CComVariant varIdx,varDef;
- CHAR szKeyname[MAX_PATH] = { 0 };
- CHAR szDefault[MAX_PATH] = { 0 };
- const int siz = 1024 * 8; // 8KBytes
- LPSTR szReturn = new CHAR[siz];
- if(varIdx.ChangeType(VT_BSTR,&idx) == S_OK){
- WideCharToMultiByte(GetACP(),0,varIdx.bstrVal,-1,szKeyname,MAX_PATH,NULL,NULL);
+
+ ATL::CString szKeyname;
+ CComVariant varIdx;
+ if (SUCCEEDED(varIdx.ChangeType(VT_BSTR, &idx))) {
+ szKeyname = varIdx.bstrVal;
}
- if(varDef.ChangeType(VT_BSTR,&def) == S_OK){
- WideCharToMultiByte(GetACP(),0,varDef.bstrVal,-1,szDefault,MAX_PATH,NULL,NULL);
+
+ ATL::CString szDefault;
+ CComVariant varDef;
+ if (SUCCEEDED(varDef.ChangeType(VT_BSTR, &def))) {
+ szDefault = varDef.bstrVal;
}
- if(GetPrivateProfileString(m_szSectionName,szKeyname,szDefault,szReturn,siz,m_szProfilePath)){
- CComVariant ret((LPCSTR)szReturn);
- ret.Detach(pVal);
+
+ DWORD siz = 1024 * 8; // 8KBytes
+ while (siz < 10 * 1024 * 1024) { // 10MBytes\82Ü\82Å
+ ATL::CString buf;
+ LPTSTR szReturn = buf.GetBufferSetLength(siz);
+ DWORD rdsiz = GetPrivateProfileString(
+ m_szSectionName, szKeyname, szDefault, szReturn, siz, m_szProfilePath);
+ if (rdsiz >= siz - 2) {
+ // \83o\83b\83t\83@\83I\81[\83o\81[\82µ\82Ä\82¢\82é\89Â\94\\90«\82ª\82 \82é\82½\82ß\83o\83b\83t\83@\82ð\91å\82«\82\82µ\82Ä\8dÄ\8e\8e\8ds\82·\82é
+ siz *= 2;
+ continue;
+ }
+ CComVariant ret(szReturn);
+ return ret.Detach(pVal);
}
- delete[]szReturn;
- return S_OK;
+ return E_OUTOFMEMORY;
}
STDMETHODIMP CProfileSection::GetKeyNames(VARIANT *pVal)
{
// \83L\81[\96¼\82Ì\97ñ\8b\93\82ð\8ds\82¤
- DWORD siz = 4096;
DWORD oldsiz = 0;
DWORD retsiz = 0;
- LPSTR pBuf = new CHAR[siz];
- while( (retsiz = GetPrivateProfileSection(m_szSectionName,pBuf,siz,m_szProfilePath)) &&
- (retsiz == (siz - 2)) && ( oldsiz != retsiz ) ){
- oldsiz = siz;
- siz *= 2;
- delete []pBuf;
- pBuf = new CHAR[siz];
+
+ ATL::CString buf;
+ LPTSTR pBuf = NULL;
+
+ DWORD siz = 4096;
+ while (siz < 10 * 1024 * 1024) { // 10MBytes\82Ü\82Å
+ pBuf = buf.GetBufferSetLength(siz);
+ DWORD rdsiz = retsiz = GetPrivateProfileSection(
+ m_szSectionName, pBuf, siz, m_szProfilePath);
+ if (rdsiz >= siz - 2) {
+ // \83o\83b\83t\83@\83I\81[\83o\81[\82µ\82Ä\82¢\82é\89Â\94\\90«\82ª\82 \82é\82½\82ß\83o\83b\83t\83@\82ð\91å\82«\82\82µ\82Ä\8dÄ\8e\8e\8ds\82·\82é
+ siz *= 2;
+ continue;
+ }
+ break;
}
- // \83J\83E\83\93\83g\82·\82é
- LPSTR p = pBuf;
+
+ // \83_\83u\83\8b\83k\83\8b\8fI\92[\95¶\8e\9a\97ñ\82©\82ç\81A\83A\83C\83e\83\80\90\94\82ð\83J\83E\83\93\83g\82·\82é
+ LPTSTR p = pBuf;
long count = 0;
- while(*p){
+ while (*p) {
count++;
- while(*p++);
+ while (*p++);
}
+
// \88ê\8e\9f\94z\97ñ\82Ì\90¶\90¬
- SAFEARRAY* pArray = SafeArrayCreateVector(VT_VARIANT,0,count);
+ SAFEARRAY* pArray = SafeArrayCreateVector(VT_VARIANT, 0, count);
long idx = 0;
p = pBuf;
- while(*p){
- CComVariant tmp;
- LPCSTR pb = p;
- while(*p){
- if(*p == '='){
+ while (*p) {
+ LPCTSTR pb = p;
+ while (*p) {
+ if (*p == '=') {
+ // \83L\81[\96¼\82¾\82¯\82É\82·\82é(value\92l\82Í\96³\8e\8b)
*p = 0;
}
p++;
}
- p++;
- tmp = (LPCSTR)pb;
- SafeArrayPutElement(pArray,&idx,&tmp);
- tmp.Clear();
+ p++; // \8e\9f\82Ì\83A\83C\83e\83\80\82Ì\90æ\93ª\82É\83A\83h\83\8c\83X\82·\82é
+
+ // \83L\81[\96¼\82ð\94z\97ñ\82É\93o\98^\82·\82é.
+ CComVariant tmp(pb);
+ SafeArrayPutElement(pArray, &idx, &tmp);
idx++;
}
- delete[]pBuf;
+
// \96ß\82è\92l
::VariantInit(pVal);
- pVal->vt = VT_VARIANT | VT_ARRAY;
+ pVal->vt = VT_VARIANT | VT_ARRAY;
pVal->parray = pArray;
return S_OK;
}