To be more accurate, it appears it broke DNS resolution. Could you please stop committing untested patches? This would help trunk going better. TYA
It looks like this change has caused some regressions in sysreg
http://www.reactos.org/testman/compare.php?ids=3934,3935
cgutman@svn.reactos.org wrote:
Author: cgutman Date: Sun Aug 22 22:22:27 2010 New Revision: 48593
URL: http://svn.reactos.org/svn/reactos?rev=48593&view=rev Log: [DHCPCSVC]
- Write the DNS servers in a REG_MULTI_SZ value
[IPHLPAPI]
- Rewrite the registry reading code
- Use HeapFree to free memory from the allocated from heap
Modified: trunk/reactos/dll/win32/dhcpcsvc/dhcp/dhclient.c trunk/reactos/dll/win32/iphlpapi/iphlpapi_private.h trunk/reactos/dll/win32/iphlpapi/registry.c trunk/reactos/dll/win32/iphlpapi/resinfo_reactos.c
Modified: trunk/reactos/dll/win32/dhcpcsvc/dhcp/dhclient.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/dhcpcsvc/dhcp/dhc... ============================================================================== --- trunk/reactos/dll/win32/dhcpcsvc/dhcp/dhclient.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/dhcpcsvc/dhcp/dhclient.c [iso-8859-1] Sun Aug 22 22:22:27 2010 @@ -507,24 +507,25 @@ char *nsbuf; int i, addrs = new_lease->options[DHO_DOMAIN_NAME_SERVERS].len / sizeof(ULONG);
nsbuf = malloc( addrs * sizeof(IP_ADDRESS_STRING) );
int len = 0;nsbuf = malloc( addrs * sizeof(IP_ADDRESS_STRING) + 1 ); if( nsbuf) {
nsbuf[0] = 0;
memset(nsbuf, 0, addrs * sizeof(IP_ADDRESS_STRING) + 1); for( i = 0; i < addrs; i++ ) { nameserver.len = sizeof(ULONG); memcpy( nameserver.iabuf, new_lease->options[DHO_DOMAIN_NAME_SERVERS].data + (i * sizeof(ULONG)), sizeof(ULONG) ); strcat( nsbuf, piaddr(nameserver) );
if( i != addrs-1 ) strcat( nsbuf, "," );
len += strlen(nsbuf) + 1; } DH_DbgPrint(MID_TRACE,("Setting DhcpNameserver: %s\n", nsbuf));
RegSetValueExA( RegKey, "DhcpNameServer", 0, REG_SZ,(LPBYTE)nsbuf, strlen(nsbuf) + 1 );
RegSetValueExA( RegKey, "DhcpNameServer", 0, REG_MULTI_SZ,(LPBYTE)nsbuf, len + 1 ); free( nsbuf ); }Modified: trunk/reactos/dll/win32/iphlpapi/iphlpapi_private.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/iphlpapi/iphlpapi... ============================================================================== --- trunk/reactos/dll/win32/iphlpapi/iphlpapi_private.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/iphlpapi/iphlpapi_private.h [iso-8859-1] Sun Aug 22 22:22:27 2010 @@ -139,6 +139,7 @@ PWCHAR GetNthChildKeyName( HANDLE RegHandle, DWORD n ); void ConsumeChildKeyName( PWCHAR Name ); PWCHAR QueryRegistryValueString( HANDLE RegHandle, PWCHAR ValueName ); +PWCHAR *QueryRegistryValueStringMulti( HANDLE RegHandle, PWCHAR ValueName ); void ConsumeRegValueString( PWCHAR NameServer ); BOOL isInterface( TDIEntityID *if_maybe ); BOOL hasArp( HANDLE tcpFile, TDIEntityID *arp_maybe );
Modified: trunk/reactos/dll/win32/iphlpapi/registry.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/iphlpapi/registry... ============================================================================== --- trunk/reactos/dll/win32/iphlpapi/registry.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/iphlpapi/registry.c [iso-8859-1] Sun Aug 22 22:22:27 2010 @@ -66,25 +66,123 @@ if (Name) HeapFree( GetProcessHeap(), 0, Name ); }
-PWCHAR QueryRegistryValueString( HANDLE RegHandle, PWCHAR ValueName ) {
- PWCHAR Name;
- DWORD ReturnedSize = 0;
+PVOID QueryRegistryValue(HANDLE RegHandle, PWCHAR ValueName, LPDWORD RegistryType, LPDWORD Length) +{
- PVOID ReadValue = NULL;
- DWORD Error;
- if (RegQueryValueExW( RegHandle, ValueName, NULL, NULL, NULL,
&ReturnedSize ) != 0) {- return 0;
- } else {
- Name = malloc( ReturnedSize);
- RegQueryValueExW( RegHandle, ValueName, NULL, NULL, (PVOID)Name,
&ReturnedSize );- return Name;
- }
- *Length = 0;
- *RegistryType = REG_NONE;
- while (TRUE)
- {
Error = RegQueryValueExW(RegHandle, ValueName, NULL, RegistryType, ReadValue, Length);if (Error == ERROR_SUCCESS){if (ReadValue) break;}else if (Error == ERROR_MORE_DATA){HeapFree(GetProcessHeap(), 0, ReadValue);}else break;ReadValue = HeapAlloc(GetProcessHeap(), 0, *Length);if (!ReadValue) return NULL;- }
- if (Error != ERROR_SUCCESS)
- {
if (ReadValue) HeapFree(GetProcessHeap(), 0, ReadValue);*Length = 0;*RegistryType = REG_NONE;ReadValue = NULL;- }
- return ReadValue;
+}
+PWCHAR TerminateReadString(PWCHAR String, DWORD Length) +{
- PWCHAR TerminatedString;
- TerminatedString = HeapAlloc(GetProcessHeap(), 0, Length + sizeof(WCHAR));
- if (TerminatedString == NULL)
return NULL;- memcpy(TerminatedString, String, Length);
- TerminatedString[Length / sizeof(WCHAR)] = UNICODE_NULL;
- return TerminatedString;
+}
+PWCHAR QueryRegistryValueString( HANDLE RegHandle, PWCHAR ValueName ) +{
- PWCHAR String, TerminatedString;
- DWORD Type, Length;
- String = QueryRegistryValue(RegHandle, ValueName, &Type, &Length);
- if (!String) return NULL;
- if (Type != REG_SZ)
- {
DbgPrint("Type mismatch for %S (%d != %d)\n", ValueName, Type, REG_SZ);//HeapFree(GetProcessHeap(), 0, String);//return NULL;- }
- TerminatedString = TerminateReadString(String, Length);
- HeapFree(GetProcessHeap(), 0, String);
- if (!TerminatedString) return NULL;
- return TerminatedString;
}
void ConsumeRegValueString( PWCHAR Value ) {
- if (Value) free(Value);
- if (Value) HeapFree(GetProcessHeap(), 0, Value);
}
PWCHAR *QueryRegistryValueStringMulti( HANDLE RegHandle, PWCHAR ValueName ) {
- return 0; /* FIXME if needed */
- PWCHAR String, TerminatedString, Tmp;
- PWCHAR *Table;
- DWORD Type, Length, i, j;
- String = QueryRegistryValue(RegHandle, ValueName, &Type, &Length);
- if (!String) return NULL;
- if (Type != REG_MULTI_SZ)
- {
DbgPrint("Type mismatch for %S (%d != %d)\n", ValueName, Type, REG_MULTI_SZ);//HeapFree(GetProcessHeap(), 0, String);//return NULL;- }
- TerminatedString = TerminateReadString(String, Length);
- HeapFree(GetProcessHeap(), 0, String);
- if (!TerminatedString) return NULL;
- for (Tmp = TerminatedString, i = 0; *Tmp; Tmp++, i++) while (*Tmp) Tmp++;
- Table = HeapAlloc(GetProcessHeap(), 0, (i + 1) * sizeof(PWCHAR));
- if (!Table)
- {
HeapFree(GetProcessHeap(), 0, TerminatedString);return NULL;- }
- for (Tmp = TerminatedString, j = 0; *Tmp; Tmp++, j++)
- {
PWCHAR Orig = Tmp;for (i = 0; *Tmp; i++, Tmp++);Table[j] = HeapAlloc(GetProcessHeap(), 0, i * sizeof(WCHAR));memcpy(Table[j], Orig, i * sizeof(WCHAR));- }
- Table[j] = NULL;
- HeapFree(GetProcessHeap(), 0, TerminatedString);
- return Table;
}
Modified: trunk/reactos/dll/win32/iphlpapi/resinfo_reactos.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/iphlpapi/resinfo_... ============================================================================== --- trunk/reactos/dll/win32/iphlpapi/resinfo_reactos.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/iphlpapi/resinfo_reactos.c [iso-8859-1] Sun Aug 22 22:22:27 2010 @@ -122,47 +122,24 @@
void EnumNameServers( HANDLE RegHandle, PWCHAR Interface, PVOID Data, EnumNameServersFunc cb ) {
- PWCHAR NameServerString =
- QueryRegistryValueString(RegHandle, L"DhcpNameServer");
PWCHAR *NameServerString =
QueryRegistryValueStringMulti(RegHandle, L"DhcpNameServer");
DWORD i;
if (!NameServerString)
NameServerString = QueryRegistryValueString(RegHandle, L"NameServer");- if (NameServerString) {
- /* Now, count the non-empty comma separated */
- DWORD ch;
- DWORD LastNameStart = 0;
- for (ch = 0; NameServerString[ch]; ch++) {
if (NameServerString[ch] == ',') {if (ch - LastNameStart > 0) { /* Skip empty entries */PWCHAR NameServer =malloc(((ch - LastNameStart) + 1) * sizeof(WCHAR));if (NameServer) {memcpy(NameServer,NameServerString + LastNameStart,(ch - LastNameStart) * sizeof(WCHAR));NameServer[ch - LastNameStart] = 0;cb( Interface, NameServer, Data );free(NameServer);LastNameStart = ch +1;}}LastNameStart = ch + 1; /* The first one after the comma */}- }
- if (ch - LastNameStart > 0) { /* A last name? */
PWCHAR NameServer = malloc(((ch - LastNameStart) + 1) * sizeof(WCHAR));if (NameServer) {memcpy(NameServer,NameServerString + LastNameStart,(ch - LastNameStart) * sizeof(WCHAR));NameServer[ch - LastNameStart] = 0;cb( Interface, NameServer, Data );free(NameServer);}- }
- ConsumeRegValueString(NameServerString);
- }
-}
NameServerString = QueryRegistryValueStringMulti(RegHandle, L"NameServer");- if (!NameServerString) return;
- for (i = 0; NameServerString[i]; i++)
- {
cb(Interface, NameServerString[i], Data);HeapFree(GetProcessHeap(), 0, NameServerString[i]);- }
- HeapFree(GetProcessHeap(), 0, NameServerString);
+} static void CreateNameServerListEnumNamesFuncCount( PWCHAR Interface, PWCHAR Server, PVOID _Data ) {
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev