Zebediah Figura : kernel32: Simplify GetPrivateProfileStringW().
Alexandre Julliard
julliard at winehq.org
Mon Jun 22 15:55:58 CDT 2020
Module: wine
Branch: master
Commit: e4b2482e53e3dbce83be1dd1dd9679960184b68b
URL: https://source.winehq.org/git/wine.git/?a=commit;h=e4b2482e53e3dbce83be1dd1dd9679960184b68b
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Sun Jun 21 19:24:10 2020 -0500
kernel32: Simplify GetPrivateProfileStringW().
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernel32/profile.c | 116 +++++++++++++++---------------------------------
1 file changed, 36 insertions(+), 80 deletions(-)
diff --git a/dlls/kernel32/profile.c b/dlls/kernel32/profile.c
index f7d64f16a5..02c6fa5efb 100644
--- a/dlls/kernel32/profile.c
+++ b/dlls/kernel32/profile.c
@@ -949,64 +949,6 @@ static INT PROFILE_GetSectionNames( LPWSTR buffer, UINT len )
return buf-buffer;
}
-
-/***********************************************************************
- * PROFILE_GetString
- *
- * Get a profile string.
- *
- * Tests with GetPrivateProfileString16, W95a,
- * with filled buffer ("****...") and section "set1" and key_name "1" valid:
- * section key_name def_val res buffer
- * "set1" "1" "x" 43 [data]
- * "set1" "1 " "x" 43 [data] (!)
- * "set1" " 1 "' "x" 43 [data] (!)
- * "set1" "" "x" 1 "x"
- * "set1" "" "x " 1 "x" (!)
- * "set1" "" " x " 3 " x" (!)
- * "set1" NULL "x" 6 "1\02\03\0\0"
- * "set1" "" "x" 1 "x"
- * NULL "1" "x" 0 "" (!)
- * "" "1" "x" 1 "x"
- * NULL NULL "" 0 ""
- *
- *
- */
-static INT PROFILE_GetString( LPCWSTR section, LPCWSTR key_name,
- LPCWSTR def_val, LPWSTR buffer, UINT len )
-{
- PROFILEKEY *key = NULL;
- static const WCHAR empty_strW[] = { 0 };
-
- if(!buffer || !len) return 0;
-
- if (!def_val) def_val = empty_strW;
- if (key_name)
- {
- key = PROFILE_Find( &CurProfile->section, section, key_name, FALSE, FALSE);
- PROFILE_CopyEntry( buffer, (key && key->value) ? key->value : def_val,
- len, TRUE );
- TRACE("(%s,%s,%s): returning %s\n",
- debugstr_w(section), debugstr_w(key_name),
- debugstr_w(def_val), debugstr_w(buffer) );
- return strlenW( buffer );
- }
- /* no "else" here ! */
- if (section)
- {
- INT ret = PROFILE_GetSection(CurProfile->section, section, buffer, len, FALSE);
- if (!buffer[0]) /* no luck -> def_val */
- {
- PROFILE_CopyEntry(buffer, def_val, len, TRUE);
- ret = strlenW(buffer);
- }
- return ret;
- }
- buffer[0] = '\0';
- return 0;
-}
-
-
/***********************************************************************
* PROFILE_SetString
*
@@ -1087,45 +1029,59 @@ INT WINAPI GetPrivateProfileStringW( LPCWSTR section, LPCWSTR entry,
LPCWSTR def_val, LPWSTR buffer,
UINT len, LPCWSTR filename )
{
+ static const WCHAR emptyW[] = {0};
int ret;
LPWSTR defval_tmp = NULL;
+ const WCHAR *p;
TRACE("%s,%s,%s,%p,%u,%s\n", debugstr_w(section), debugstr_w(entry),
debugstr_w(def_val), buffer, len, debugstr_w(filename));
+ if (!buffer || !len) return 0;
+ if (!def_val) def_val = emptyW;
+ if (!section) return GetPrivateProfileSectionNamesW( buffer, len, filename );
+
/* strip any trailing ' ' of def_val. */
- if (def_val)
- {
- LPCWSTR p = def_val + strlenW(def_val) - 1;
+ p = def_val + strlenW(def_val) - 1;
- while (p > def_val && *p == ' ')
- p--;
+ while (p > def_val && *p == ' ') p--;
- if (p >= def_val)
- {
- int vlen = (int)(p - def_val) + 1;
+ if (p >= def_val)
+ {
+ int vlen = (int)(p - def_val) + 1;
- defval_tmp = HeapAlloc(GetProcessHeap(), 0, (vlen + 1) * sizeof(WCHAR));
- memcpy(defval_tmp, def_val, vlen * sizeof(WCHAR));
- defval_tmp[vlen] = '\0';
- def_val = defval_tmp;
- }
+ defval_tmp = HeapAlloc(GetProcessHeap(), 0, (vlen + 1) * sizeof(WCHAR));
+ memcpy(defval_tmp, def_val, vlen * sizeof(WCHAR));
+ defval_tmp[vlen] = '\0';
+ def_val = defval_tmp;
}
RtlEnterCriticalSection( &PROFILE_CritSect );
- if (PROFILE_Open( filename, FALSE )) {
- if (section == NULL)
- ret = PROFILE_GetSectionNames(buffer, len);
- else
- /* PROFILE_GetString can handle the 'entry == NULL' case */
- ret = PROFILE_GetString( section, entry, def_val, buffer, len );
- } else if (buffer && def_val) {
+ if (PROFILE_Open( filename, FALSE ))
+ {
+ if (entry)
+ {
+ PROFILEKEY *key = PROFILE_Find( &CurProfile->section, section, entry, FALSE, FALSE );
+ PROFILE_CopyEntry( buffer, (key && key->value) ? key->value : def_val, len, TRUE );
+ TRACE("-> %s\n", debugstr_w( buffer ));
+ ret = strlenW( buffer );
+ }
+ else
+ {
+ ret = PROFILE_GetSection( CurProfile->section, section, buffer, len, FALSE );
+ if (!buffer[0])
+ {
+ PROFILE_CopyEntry( buffer, def_val, len, TRUE );
+ ret = strlenW( buffer );
+ }
+ }
+ }
+ else
+ {
lstrcpynW( buffer, def_val, len );
ret = strlenW( buffer );
}
- else
- ret = 0;
RtlLeaveCriticalSection( &PROFILE_CritSect );
More information about the wine-cvs
mailing list