/* * SetupX .inf file parsing functions * * FIXME: return values ??? */ #include "debugtools.h" #include "windef.h" #include "winbase.h" #include "wine/winbase16.h" #include "setupx16.h" DEFAULT_DEBUG_CHANNEL(setupx); WORD InfNumEntries = 0; INF_HANDLE *InfList = NULL; #define GET_INF_ENTRY(x) ((InfList - x)/4) RETERR16 IP_OpenInf(LPCSTR lpInfFileName, HINF16 *lphInf) { HFILE16 hFile = _lopen16(lpInfFileName, OF_READ); if (!lphInf) return IP_ERROR; if (hFile != HFILE_ERROR16) { InfList = HeapReAlloc(GetProcessHeap(), 0, InfList, InfNumEntries+1); InfList[InfNumEntries].hInfFile = hFile; InfList[InfNumEntries].lpInfFileName = lpInfFileName; InfNumEntries++; *lphInf = &InfList[InfNumEntries-1] - InfList; return OK; } *lphInf = 0xffff; return ERR_IP_INVALID_INFFILE; } LPCSTR IP_GetFileName(HINF16 hInf) { if ((hInf <= (InfNumEntries*sizeof(INF_HANDLE *))) && ((hInf & 3) == 0)) /* aligned ? */ { return InfList[hInf/4].lpInfFileName; } return NULL; } RETERR16 IP_CloseInf(HINF16 hInf) { int i; HFILE16 res = ERR_IP_INVALID_HINF; if ((hInf <= (InfNumEntries*sizeof(INF_HANDLE *))) && ((hInf & 3) == 0)) /* aligned ? */ { _lclose16(InfList[hInf/4].hInfFile); res = OK; for (i=hInf/4; i < InfNumEntries-1; i++) InfList[i] = InfList[i+1]; InfNumEntries--; InfList = HeapReAlloc(GetProcessHeap(), 0, InfList, InfNumEntries); } return res; } /*********************************************************************** * IpOpen16 * */ RETERR16 WINAPI IpOpen16(LPCSTR lpInfFileName, HINF16 *lphInf) { TRACE("('%s', %p)\n", lpInfFileName, lphInf); return IP_OpenInf(lpInfFileName, lphInf); } /*********************************************************************** * IpClose16 */ RETERR16 WINAPI IpClose16(HINF16 hInf) { return IP_CloseInf(hInf); } /*********************************************************************** * IpGetProfileString16 */ RETERR16 WINAPI IpGetProfileString16(HINF16 hInf, LPCSTR section, LPCSTR entry, LPSTR buffer, WORD buflen) { GetPrivateProfileString16(section, entry, "", buffer, buflen, IP_GetFileName(hInf)); return 0; }