Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
39daf43c
Commit
39daf43c
authored
Mar 26, 2013
by
Piotr Caban
Committed by
Alexandre Julliard
Mar 26, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wininet: Rename URLCACHE_HEADER to urlcache_header.
parent
d7ab4d74
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
128 additions
and
131 deletions
+128
-131
urlcache.c
dlls/wininet/urlcache.c
+128
-131
No files found.
dlls/wininet/urlcache.c
View file @
39daf43c
...
...
@@ -157,29 +157,26 @@ typedef struct
struct
hash_entry
hash_table
[
HASHTABLE_SIZE
];
}
entry_hash_table
;
typedef
struct
_DIRECTORY_DATA
{
DWORD
dwNumFiles
;
char
filename
[
DIR_LENGTH
];
}
DIRECTORY_DATA
;
typedef
struct
_URLCACHE_HEADER
typedef
struct
{
char
szSignature
[
28
];
DWORD
dwFileSize
;
DWORD
dwOffsetFirstHashTable
;
DWORD
dwIndexCapacityInBlocks
;
DWORD
dwBlocksInUse
;
DWORD
dwUnknown1
;
ULARGE_INTEGER
CacheLimit
;
ULARGE_INTEGER
CacheUsage
;
ULARGE_INTEGER
ExemptUsage
;
DWORD
DirectoryCount
;
DIRECTORY_DATA
directory_data
[
MAX_DIR_NO
];
char
signature
[
28
];
DWORD
size
;
DWORD
hash_table_off
;
DWORD
capacity_in_blocks
;
DWORD
blocks_in_use
;
DWORD
unk1
;
ULARGE_INTEGER
cache_limit
;
ULARGE_INTEGER
cache_usage
;
ULARGE_INTEGER
exempt_usage
;
DWORD
dirs_no
;
struct
_directory_data
{
DWORD
files_no
;
char
name
[
DIR_LENGTH
];
}
directory_data
[
MAX_DIR_NO
];
DWORD
options
[
0x21
];
BYTE
allocation_table
[
ALLOCATION_TABLE_SIZE
];
}
URLCACHE_HEADER
,
*
LPURLCACHE_HEADER
;
typedef
const
URLCACHE_HEADER
*
LPCURLCACHE_HEADER
;
}
urlcache_header
;
typedef
struct
_STREAM_HANDLE
{
...
...
@@ -202,7 +199,7 @@ typedef struct _URLCACHECONTAINER
/* List of all containers available */
static
struct
list
UrlContainers
=
LIST_INIT
(
UrlContainers
);
static
DWORD
URLCache_CreateHashTable
(
LPURLCACHE_HEADER
pHeader
,
entry_hash_table
*
pPrevHash
,
entry_hash_table
**
ppHash
);
static
DWORD
URLCache_CreateHashTable
(
urlcache_header
*
pHeader
,
entry_hash_table
*
pPrevHash
,
entry_hash_table
**
ppHash
);
/***********************************************************************
* URLCache_PathToObjectName (Internal)
...
...
@@ -258,7 +255,7 @@ static DWORD cache_container_set_size(URLCACHECONTAINER *container, HANDLE file,
DWORD
file_size
=
FILE_SIZE
(
blocks_no
);
WCHAR
dir_path
[
MAX_PATH
],
*
dir_name
;
entry_hash_table
*
hashtable_entry
;
URLCACHE_HEADER
*
header
;
urlcache_header
*
header
;
HANDLE
mapping
;
FILETIME
ft
;
HKEY
key
;
...
...
@@ -281,10 +278,10 @@ static DWORD cache_container_set_size(URLCACHECONTAINER *container, HANDLE file,
}
if
(
blocks_no
!=
MIN_BLOCK_NO
)
{
if
(
file_size
>
header
->
dwFileS
ize
)
memset
((
char
*
)
header
+
header
->
dwFileSize
,
0
,
file_size
-
header
->
dwFileS
ize
);
header
->
dwFileS
ize
=
file_size
;
header
->
dwIndexCapacityInB
locks
=
blocks_no
;
if
(
file_size
>
header
->
s
ize
)
memset
((
char
*
)
header
+
header
->
size
,
0
,
file_size
-
header
->
s
ize
);
header
->
s
ize
=
file_size
;
header
->
capacity_in_b
locks
=
blocks_no
;
UnmapViewOfFile
(
header
);
CloseHandle
(
container
->
hMapping
);
...
...
@@ -295,14 +292,14 @@ static DWORD cache_container_set_size(URLCACHECONTAINER *container, HANDLE file,
memset
(
header
,
0
,
file_size
);
/* First set some constants and defaults in the header */
memcpy
(
header
->
s
zS
ignature
,
urlcache_ver_prefix
,
sizeof
(
urlcache_ver_prefix
)
-
1
);
memcpy
(
header
->
s
zS
ignature
+
sizeof
(
urlcache_ver_prefix
)
-
1
,
urlcache_ver
,
sizeof
(
urlcache_ver
)
-
1
);
header
->
dwFileS
ize
=
file_size
;
header
->
dwIndexCapacityInB
locks
=
blocks_no
;
memcpy
(
header
->
signature
,
urlcache_ver_prefix
,
sizeof
(
urlcache_ver_prefix
)
-
1
);
memcpy
(
header
->
signature
+
sizeof
(
urlcache_ver_prefix
)
-
1
,
urlcache_ver
,
sizeof
(
urlcache_ver
)
-
1
);
header
->
s
ize
=
file_size
;
header
->
capacity_in_b
locks
=
blocks_no
;
/* 127MB - taken from default for Windows 2000 */
header
->
CacheL
imit
.
QuadPart
=
0x07ff5400
;
header
->
cache_l
imit
.
QuadPart
=
0x07ff5400
;
/* Copied from a Windows 2000 cache index */
header
->
DirectoryCount
=
container
->
default_entry_type
==
NORMAL_CACHE_ENTRY
?
4
:
0
;
header
->
dirs_no
=
container
->
default_entry_type
==
NORMAL_CACHE_ENTRY
?
4
:
0
;
/* If the registry has a cache size set, use the registry value */
if
(
RegOpenKeyW
(
HKEY_CURRENT_USER
,
cache_content_key
,
&
key
)
==
ERROR_SUCCESS
)
{
...
...
@@ -310,7 +307,7 @@ static DWORD cache_container_set_size(URLCACHECONTAINER *container, HANDLE file,
if
(
RegQueryValueExW
(
key
,
cache_limit
,
NULL
,
&
keytype
,
(
BYTE
*
)
&
dw
,
&
len
)
==
ERROR_SUCCESS
&&
keytype
==
REG_DWORD
)
header
->
CacheL
imit
.
QuadPart
=
(
ULONGLONG
)
dw
*
1024
;
header
->
cache_l
imit
.
QuadPart
=
(
ULONGLONG
)
dw
*
1024
;
RegCloseKey
(
key
);
}
...
...
@@ -323,8 +320,8 @@ static DWORD cache_container_set_size(URLCACHECONTAINER *container, HANDLE file,
GetSystemTimeAsFileTime
(
&
ft
);
for
(
i
=
0
;
i
<
header
->
DirectoryCount
;
++
i
)
{
header
->
directory_data
[
i
].
dwNumFiles
=
0
;
for
(
i
=
0
;
i
<
header
->
dirs_no
;
++
i
)
{
header
->
directory_data
[
i
].
files_no
=
0
;
for
(
j
=
0
;;
++
j
)
{
ULONGLONG
n
=
ft
.
dwHighDateTime
;
int
k
;
...
...
@@ -359,7 +356,7 @@ static DWORD cache_container_set_size(URLCACHECONTAINER *container, HANDLE file,
* pages and for UTF-16
*/
for
(
k
=
0
;
k
<
8
;
++
k
)
header
->
directory_data
[
i
].
file
name
[
k
]
=
dir_name
[
k
];
header
->
directory_data
[
i
].
name
[
k
]
=
dir_name
[
k
];
break
;
}
else
if
(
j
>=
255
)
{
/* Give up. The most likely cause of this
...
...
@@ -381,31 +378,31 @@ static DWORD cache_container_set_size(URLCACHECONTAINER *container, HANDLE file,
return
ERROR_SUCCESS
;
}
static
BOOL
cache_container_is_valid
(
URLCACHE_HEADER
*
header
,
DWORD
file_size
)
static
BOOL
cache_container_is_valid
(
urlcache_header
*
header
,
DWORD
file_size
)
{
DWORD
allocation_size
,
count_bits
,
i
;
if
(
file_size
<
FILE_SIZE
(
MIN_BLOCK_NO
))
return
FALSE
;
if
(
file_size
!=
header
->
dwFileS
ize
)
if
(
file_size
!=
header
->
s
ize
)
return
FALSE
;
if
(
!
memcmp
(
header
->
s
zS
ignature
,
urlcache_ver_prefix
,
sizeof
(
urlcache_ver_prefix
)
-
1
)
&&
memcmp
(
header
->
s
zS
ignature
+
sizeof
(
urlcache_ver_prefix
)
-
1
,
urlcache_ver
,
sizeof
(
urlcache_ver
)
-
1
))
if
(
!
memcmp
(
header
->
signature
,
urlcache_ver_prefix
,
sizeof
(
urlcache_ver_prefix
)
-
1
)
&&
memcmp
(
header
->
signature
+
sizeof
(
urlcache_ver_prefix
)
-
1
,
urlcache_ver
,
sizeof
(
urlcache_ver
)
-
1
))
return
FALSE
;
if
(
FILE_SIZE
(
header
->
dwIndexCapacityInB
locks
)
!=
file_size
)
if
(
FILE_SIZE
(
header
->
capacity_in_b
locks
)
!=
file_size
)
return
FALSE
;
allocation_size
=
0
;
for
(
i
=
0
;
i
<
header
->
dwIndexCapacityInB
locks
/
8
;
i
++
)
{
for
(
i
=
0
;
i
<
header
->
capacity_in_b
locks
/
8
;
i
++
)
{
for
(
count_bits
=
header
->
allocation_table
[
i
];
count_bits
!=
0
;
count_bits
>>=
1
)
{
if
(
count_bits
&
1
)
allocation_size
++
;
}
}
if
(
allocation_size
!=
header
->
dwBlocksInU
se
)
if
(
allocation_size
!=
header
->
blocks_in_u
se
)
return
FALSE
;
for
(;
i
<
ALLOCATION_TABLE_SIZE
;
i
++
)
{
...
...
@@ -480,7 +477,7 @@ static DWORD cache_container_open_index(URLCACHECONTAINER *container, DWORD bloc
container
->
hMapping
=
cache_container_map_index
(
file
,
container
->
path
,
file_size
,
&
validate
);
CloseHandle
(
file
);
if
(
container
->
hMapping
&&
validate
)
{
URLCACHE_HEADER
*
header
=
MapViewOfFile
(
container
->
hMapping
,
FILE_MAP_WRITE
,
0
,
0
,
0
);
urlcache_header
*
header
=
MapViewOfFile
(
container
->
hMapping
,
FILE_MAP_WRITE
,
0
,
0
,
0
);
if
(
header
&&
!
cache_container_is_valid
(
header
,
file_size
))
{
WARN
(
"detected old or broken index.dat file
\n
"
);
...
...
@@ -727,11 +724,11 @@ static BOOL URLCacheContainers_Enum(LPCWSTR lpwszSearchPattern, DWORD dwIndex, U
* Cache file header if successful
* NULL if failed and calls SetLastError.
*/
static
LPURLCACHE_HEADER
cache_container_lock_index
(
URLCACHECONTAINER
*
pContainer
)
static
urlcache_header
*
cache_container_lock_index
(
URLCACHECONTAINER
*
pContainer
)
{
BYTE
index
;
LPVOID
pIndexData
;
URLCACHE_HEADER
*
pHeader
;
urlcache_header
*
pHeader
;
DWORD
error
;
/* acquire mutex */
...
...
@@ -745,12 +742,12 @@ static LPURLCACHE_HEADER cache_container_lock_index(URLCACHECONTAINER * pContain
ERR
(
"Couldn't MapViewOfFile. Error: %d
\n
"
,
GetLastError
());
return
NULL
;
}
pHeader
=
(
URLCACHE_HEADER
*
)
pIndexData
;
pHeader
=
(
urlcache_header
*
)
pIndexData
;
/* file has grown - we need to remap to prevent us getting
* access violations when we try and access beyond the end
* of the memory mapped file */
if
(
pHeader
->
dwFileS
ize
!=
pContainer
->
file_size
)
if
(
pHeader
->
s
ize
!=
pContainer
->
file_size
)
{
UnmapViewOfFile
(
pHeader
);
cache_container_close_index
(
pContainer
);
...
...
@@ -769,14 +766,14 @@ static LPURLCACHE_HEADER cache_container_lock_index(URLCACHECONTAINER * pContain
ERR
(
"Couldn't MapViewOfFile. Error: %d
\n
"
,
GetLastError
());
return
NULL
;
}
pHeader
=
(
URLCACHE_HEADER
*
)
pIndexData
;
pHeader
=
(
urlcache_header
*
)
pIndexData
;
}
TRACE
(
"Signature: %s, file size: %d bytes
\n
"
,
pHeader
->
s
zSignature
,
pHeader
->
dwFileS
ize
);
TRACE
(
"Signature: %s, file size: %d bytes
\n
"
,
pHeader
->
s
ignature
,
pHeader
->
s
ize
);
for
(
index
=
0
;
index
<
pHeader
->
DirectoryCount
;
index
++
)
for
(
index
=
0
;
index
<
pHeader
->
dirs_no
;
index
++
)
{
TRACE
(
"Directory[%d] =
\"
%.8s
\"\n
"
,
index
,
pHeader
->
directory_data
[
index
].
file
name
);
TRACE
(
"Directory[%d] =
\"
%.8s
\"\n
"
,
index
,
pHeader
->
directory_data
[
index
].
name
);
}
return
pHeader
;
...
...
@@ -786,7 +783,7 @@ static LPURLCACHE_HEADER cache_container_lock_index(URLCACHECONTAINER * pContain
* cache_container_unlock_index (Internal)
*
*/
static
BOOL
cache_container_unlock_index
(
URLCACHECONTAINER
*
pContainer
,
LPURLCACHE_HEADER
pHeader
)
static
BOOL
cache_container_unlock_index
(
URLCACHECONTAINER
*
pContainer
,
urlcache_header
*
pHeader
)
{
/* release mutex */
ReleaseMutex
(
pContainer
->
hMutex
);
...
...
@@ -860,15 +857,15 @@ static inline void URLCache_Allocation_BlockAllocate(BYTE * AllocationTable, DWO
* Any other Win32 error code if the entry could not be added
*
*/
static
DWORD
URLCache_FindFirstFreeEntry
(
URLCACHE_HEADER
*
pHeader
,
DWORD
dwBlocksNeeded
,
entry_header
**
ppEntry
)
static
DWORD
URLCache_FindFirstFreeEntry
(
urlcache_header
*
pHeader
,
DWORD
dwBlocksNeeded
,
entry_header
**
ppEntry
)
{
DWORD
dwBlockNumber
;
DWORD
dwFreeCounter
;
for
(
dwBlockNumber
=
0
;
dwBlockNumber
<
pHeader
->
dwIndexCapacityInB
locks
;
dwBlockNumber
++
)
for
(
dwBlockNumber
=
0
;
dwBlockNumber
<
pHeader
->
capacity_in_b
locks
;
dwBlockNumber
++
)
{
for
(
dwFreeCounter
=
0
;
dwFreeCounter
<
dwBlocksNeeded
&&
dwFreeCounter
+
dwBlockNumber
<
pHeader
->
dwIndexCapacityInB
locks
&&
dwFreeCounter
+
dwBlockNumber
<
pHeader
->
capacity_in_b
locks
&&
URLCache_Allocation_BlockIsFree
(
pHeader
->
allocation_table
,
dwBlockNumber
+
dwFreeCounter
);
dwFreeCounter
++
)
TRACE
(
"Found free block at no. %d (0x%x)
\n
"
,
dwBlockNumber
,
ENTRY_START_OFFSET
+
dwBlockNumber
*
BLOCKSIZE
);
...
...
@@ -883,7 +880,7 @@ static DWORD URLCache_FindFirstFreeEntry(URLCACHE_HEADER * pHeader, DWORD dwBloc
for
(
index
=
0
;
index
<
dwBlocksNeeded
*
BLOCKSIZE
/
sizeof
(
DWORD
);
index
++
)
((
DWORD
*
)
*
ppEntry
)[
index
]
=
0xdeadbeef
;
(
*
ppEntry
)
->
blocks_used
=
dwBlocksNeeded
;
pHeader
->
dwBlocksInU
se
+=
dwBlocksNeeded
;
pHeader
->
blocks_in_u
se
+=
dwBlocksNeeded
;
return
ERROR_SUCCESS
;
}
}
...
...
@@ -901,7 +898,7 @@ static DWORD URLCache_FindFirstFreeEntry(URLCACHE_HEADER * pHeader, DWORD dwBloc
* FALSE if it failed
*
*/
static
BOOL
URLCache_DeleteEntry
(
LPURLCACHE_HEADER
pHeader
,
entry_header
*
pEntry
)
static
BOOL
URLCache_DeleteEntry
(
urlcache_header
*
pHeader
,
entry_header
*
pEntry
)
{
DWORD
dwStartBlock
;
DWORD
dwBlock
;
...
...
@@ -911,7 +908,7 @@ static BOOL URLCache_DeleteEntry(LPURLCACHE_HEADER pHeader, entry_header *pEntry
for
(
dwBlock
=
dwStartBlock
;
dwBlock
<
dwStartBlock
+
pEntry
->
blocks_used
;
dwBlock
++
)
URLCache_Allocation_BlockFree
(
pHeader
->
allocation_table
,
dwBlock
);
pHeader
->
dwBlocksInU
se
-=
pEntry
->
blocks_used
;
pHeader
->
blocks_in_u
se
-=
pEntry
->
blocks_used
;
return
TRUE
;
}
...
...
@@ -929,7 +926,7 @@ static BOOL URLCache_DeleteEntry(LPURLCACHE_HEADER pHeader, entry_header *pEntry
*/
static
BOOL
URLCache_LocalFileNameToPathW
(
const
URLCACHECONTAINER
*
pContainer
,
LPCURLCACHE_HEADER
pHeader
,
const
urlcache_header
*
pHeader
,
LPCSTR
szLocalFileName
,
BYTE
Directory
,
LPWSTR
wszPath
,
...
...
@@ -938,7 +935,7 @@ static BOOL URLCache_LocalFileNameToPathW(
LONG
nRequired
;
int
path_len
=
strlenW
(
pContainer
->
path
);
int
file_name_len
=
MultiByteToWideChar
(
CP_ACP
,
0
,
szLocalFileName
,
-
1
,
NULL
,
0
);
if
(
Directory
!=
CACHE_CONTAINER_NO_SUBDIR
&&
Directory
>=
pHeader
->
DirectoryCount
)
if
(
Directory
!=
CACHE_CONTAINER_NO_SUBDIR
&&
Directory
>=
pHeader
->
dirs_no
)
{
*
lpBufferSize
=
0
;
return
FALSE
;
...
...
@@ -954,7 +951,7 @@ static BOOL URLCache_LocalFileNameToPathW(
memcpy
(
wszPath
,
pContainer
->
path
,
path_len
*
sizeof
(
WCHAR
));
if
(
Directory
!=
CACHE_CONTAINER_NO_SUBDIR
)
{
dir_len
=
MultiByteToWideChar
(
CP_ACP
,
0
,
pHeader
->
directory_data
[
Directory
].
file
name
,
DIR_LENGTH
,
wszPath
+
path_len
,
DIR_LENGTH
);
dir_len
=
MultiByteToWideChar
(
CP_ACP
,
0
,
pHeader
->
directory_data
[
Directory
].
name
,
DIR_LENGTH
,
wszPath
+
path_len
,
DIR_LENGTH
);
wszPath
[
dir_len
+
path_len
]
=
'\\'
;
dir_len
++
;
}
...
...
@@ -984,7 +981,7 @@ static BOOL URLCache_LocalFileNameToPathW(
*/
static
BOOL
URLCache_LocalFileNameToPathA
(
const
URLCACHECONTAINER
*
pContainer
,
LPCURLCACHE_HEADER
pHeader
,
const
urlcache_header
*
pHeader
,
LPCSTR
szLocalFileName
,
BYTE
Directory
,
LPSTR
szPath
,
...
...
@@ -993,7 +990,7 @@ static BOOL URLCache_LocalFileNameToPathA(
LONG
nRequired
;
int
path_len
,
file_name_len
,
dir_len
;
if
(
Directory
!=
CACHE_CONTAINER_NO_SUBDIR
&&
Directory
>=
pHeader
->
DirectoryCount
)
if
(
Directory
!=
CACHE_CONTAINER_NO_SUBDIR
&&
Directory
>=
pHeader
->
dirs_no
)
{
*
lpBufferSize
=
0
;
return
FALSE
;
...
...
@@ -1011,7 +1008,7 @@ static BOOL URLCache_LocalFileNameToPathA(
{
WideCharToMultiByte
(
CP_ACP
,
0
,
pContainer
->
path
,
-
1
,
szPath
,
path_len
,
NULL
,
NULL
);
if
(
dir_len
)
{
memcpy
(
szPath
+
path_len
,
pHeader
->
directory_data
[
Directory
].
file
name
,
dir_len
-
1
);
memcpy
(
szPath
+
path_len
,
pHeader
->
directory_data
[
Directory
].
name
,
dir_len
-
1
);
szPath
[
path_len
+
dir_len
-
1
]
=
'\\'
;
}
memcpy
(
szPath
+
path_len
+
dir_len
,
szLocalFileName
,
file_name_len
);
...
...
@@ -1038,7 +1035,7 @@ static void URLCache_FileTimeToDosDateTime(const FILETIME *ft, WORD *fatdate,
* URLCache_DeleteFile (Internal)
*/
static
DWORD
URLCache_DeleteFile
(
const
URLCACHECONTAINER
*
container
,
URLCACHE_HEADER
*
header
,
entry_url
*
url_entry
)
urlcache_header
*
header
,
entry_url
*
url_entry
)
{
WIN32_FILE_ATTRIBUTE_DATA
attr
;
WCHAR
path
[
MAX_PATH
];
...
...
@@ -1065,30 +1062,30 @@ static DWORD URLCache_DeleteFile(const URLCACHECONTAINER *container,
return
err
;
succ:
if
(
url_entry
->
cache_dir
<
header
->
DirectoryCount
)
if
(
url_entry
->
cache_dir
<
header
->
dirs_no
)
{
if
(
header
->
directory_data
[
url_entry
->
cache_dir
].
dwNumFiles
)
header
->
directory_data
[
url_entry
->
cache_dir
].
dwNumFiles
--
;
if
(
header
->
directory_data
[
url_entry
->
cache_dir
].
files_no
)
header
->
directory_data
[
url_entry
->
cache_dir
].
files_no
--
;
}
if
(
url_entry
->
cache_entry_type
&
STICKY_CACHE_ENTRY
)
{
if
(
url_entry
->
size
.
QuadPart
<
header
->
ExemptU
sage
.
QuadPart
)
header
->
ExemptU
sage
.
QuadPart
-=
url_entry
->
size
.
QuadPart
;
if
(
url_entry
->
size
.
QuadPart
<
header
->
exempt_u
sage
.
QuadPart
)
header
->
exempt_u
sage
.
QuadPart
-=
url_entry
->
size
.
QuadPart
;
else
header
->
ExemptU
sage
.
QuadPart
=
0
;
header
->
exempt_u
sage
.
QuadPart
=
0
;
}
else
{
if
(
url_entry
->
size
.
QuadPart
<
header
->
CacheU
sage
.
QuadPart
)
header
->
CacheU
sage
.
QuadPart
-=
url_entry
->
size
.
QuadPart
;
if
(
url_entry
->
size
.
QuadPart
<
header
->
cache_u
sage
.
QuadPart
)
header
->
cache_u
sage
.
QuadPart
-=
url_entry
->
size
.
QuadPart
;
else
header
->
CacheU
sage
.
QuadPart
=
0
;
header
->
cache_u
sage
.
QuadPart
=
0
;
}
return
ERROR_SUCCESS
;
}
static
BOOL
urlcache_clean_leaked_entries
(
URLCACHECONTAINER
*
container
,
URLCACHE_HEADER
*
header
)
static
BOOL
urlcache_clean_leaked_entries
(
URLCACHECONTAINER
*
container
,
urlcache_header
*
header
)
{
DWORD
*
leak_off
;
BOOL
freed
=
FALSE
;
...
...
@@ -1121,9 +1118,9 @@ static BOOL urlcache_clean_leaked_entries(URLCACHECONTAINER *container, URLCACHE
* ERROR_SUCCESS when new memory is available
* error code otherwise
*/
static
DWORD
cache_container_clean_index
(
URLCACHECONTAINER
*
container
,
URLCACHE_HEADER
**
file_view
)
static
DWORD
cache_container_clean_index
(
URLCACHECONTAINER
*
container
,
urlcache_header
**
file_view
)
{
URLCACHE_HEADER
*
header
=
*
file_view
;
urlcache_header
*
header
=
*
file_view
;
DWORD
ret
;
TRACE
(
"(%s %s)
\n
"
,
debugstr_w
(
container
->
cache_prefix
),
debugstr_w
(
container
->
path
));
...
...
@@ -1131,13 +1128,13 @@ static DWORD cache_container_clean_index(URLCACHECONTAINER *container, URLCACHE_
if
(
urlcache_clean_leaked_entries
(
container
,
header
))
return
ERROR_SUCCESS
;
if
(
header
->
dwFileS
ize
>=
ALLOCATION_TABLE_SIZE
*
8
*
BLOCKSIZE
+
ENTRY_START_OFFSET
)
{
if
(
header
->
s
ize
>=
ALLOCATION_TABLE_SIZE
*
8
*
BLOCKSIZE
+
ENTRY_START_OFFSET
)
{
WARN
(
"index file has maximal size
\n
"
);
return
ERROR_NOT_ENOUGH_MEMORY
;
}
cache_container_close_index
(
container
);
ret
=
cache_container_open_index
(
container
,
header
->
dwIndexCapacityInB
locks
*
2
);
ret
=
cache_container_open_index
(
container
,
header
->
capacity_in_b
locks
*
2
);
if
(
ret
!=
ERROR_SUCCESS
)
return
ret
;
header
=
MapViewOfFile
(
container
->
hMapping
,
FILE_MAP_WRITE
,
0
,
0
,
0
);
...
...
@@ -1173,7 +1170,7 @@ static void URLCache_DosDateTimeToFileTime(WORD fatdate, WORD fattime,
*/
static
DWORD
URLCache_CopyEntry
(
URLCACHECONTAINER
*
pContainer
,
LPCURLCACHE_HEADER
pHeader
,
const
urlcache_header
*
pHeader
,
LPINTERNET_CACHE_ENTRY_INFOA
lpCacheEntryInfo
,
LPDWORD
lpdwBufferSize
,
const
entry_url
*
pUrlEntry
,
...
...
@@ -1386,19 +1383,19 @@ static DWORD URLCache_HashKey(LPCSTR lpszKey)
return
*
(
DWORD
*
)
key
;
}
static
inline
entry_hash_table
*
URLCache_HashEntryFromOffset
(
LPCURLCACHE_HEADER
pHeader
,
DWORD
dwOffset
)
static
inline
entry_hash_table
*
URLCache_HashEntryFromOffset
(
const
urlcache_header
*
pHeader
,
DWORD
dwOffset
)
{
return
(
entry_hash_table
*
)((
LPBYTE
)
pHeader
+
dwOffset
);
}
static
inline
BOOL
URLCache_IsHashEntryValid
(
LPCURLCACHE_HEADER
pHeader
,
const
entry_hash_table
*
pHashEntry
)
static
inline
BOOL
URLCache_IsHashEntryValid
(
const
urlcache_header
*
pHeader
,
const
entry_hash_table
*
pHashEntry
)
{
/* check pHashEntry located within acceptable bounds in the URL cache mapping */
return
((
DWORD
)((
const
BYTE
*
)
pHashEntry
-
(
const
BYTE
*
)
pHeader
)
>=
ENTRY_START_OFFSET
)
&&
((
DWORD
)((
const
BYTE
*
)
pHashEntry
-
(
const
BYTE
*
)
pHeader
)
<
pHeader
->
dwFileS
ize
);
((
DWORD
)((
const
BYTE
*
)
pHashEntry
-
(
const
BYTE
*
)
pHeader
)
<
pHeader
->
s
ize
);
}
static
BOOL
URLCache_FindHash
(
LPCURLCACHE_HEADER
pHeader
,
LPCSTR
lpszUrl
,
struct
hash_entry
**
ppHashEntry
)
static
BOOL
URLCache_FindHash
(
const
urlcache_header
*
pHeader
,
LPCSTR
lpszUrl
,
struct
hash_entry
**
ppHashEntry
)
{
/* structure of hash table:
* 448 entries divided into 64 blocks
...
...
@@ -1419,7 +1416,7 @@ static BOOL URLCache_FindHash(LPCURLCACHE_HEADER pHeader, LPCSTR lpszUrl, struct
key
>>=
HASHTABLE_FLAG_BITS
;
for
(
pHashEntry
=
URLCache_HashEntryFromOffset
(
pHeader
,
pHeader
->
dwOffsetFirstHashTable
);
for
(
pHashEntry
=
URLCache_HashEntryFromOffset
(
pHeader
,
pHeader
->
hash_table_off
);
URLCache_IsHashEntryValid
(
pHeader
,
pHashEntry
);
pHashEntry
=
URLCache_HashEntryFromOffset
(
pHeader
,
pHashEntry
->
next
))
{
...
...
@@ -1455,7 +1452,7 @@ static BOOL URLCache_FindHash(LPCURLCACHE_HEADER pHeader, LPCSTR lpszUrl, struct
return
FALSE
;
}
static
BOOL
URLCache_FindHashW
(
LPCURLCACHE_HEADER
pHeader
,
LPCWSTR
lpszUrl
,
struct
hash_entry
**
ppHashEntry
)
static
BOOL
URLCache_FindHashW
(
const
urlcache_header
*
pHeader
,
LPCWSTR
lpszUrl
,
struct
hash_entry
**
ppHashEntry
)
{
LPSTR
urlA
;
BOOL
ret
;
...
...
@@ -1515,7 +1512,7 @@ static BOOL URLCache_DeleteEntryFromHash(struct hash_entry *pHashEntry)
* Any other Win32 error code if the entry could not be added
*
*/
static
DWORD
URLCache_AddEntryToHash
(
LPURLCACHE_HEADER
pHeader
,
LPCSTR
lpszUrl
,
DWORD
dwOffsetEntry
,
DWORD
dwFieldType
)
static
DWORD
URLCache_AddEntryToHash
(
urlcache_header
*
pHeader
,
LPCSTR
lpszUrl
,
DWORD
dwOffsetEntry
,
DWORD
dwFieldType
)
{
/* see URLCache_FindEntryInHash for structure of hash tables */
...
...
@@ -1527,7 +1524,7 @@ static DWORD URLCache_AddEntryToHash(LPURLCACHE_HEADER pHeader, LPCSTR lpszUrl,
key
=
((
key
>>
HASHTABLE_FLAG_BITS
)
<<
HASHTABLE_FLAG_BITS
)
+
dwFieldType
;
for
(
pHashEntry
=
URLCache_HashEntryFromOffset
(
pHeader
,
pHeader
->
dwOffsetFirstHashTable
);
for
(
pHashEntry
=
URLCache_HashEntryFromOffset
(
pHeader
,
pHeader
->
hash_table_off
);
URLCache_IsHashEntryValid
(
pHeader
,
pHashEntry
);
pHashEntry
=
URLCache_HashEntryFromOffset
(
pHeader
,
pHashEntry
->
next
))
{
...
...
@@ -1577,7 +1574,7 @@ static DWORD URLCache_AddEntryToHash(LPURLCACHE_HEADER pHeader, LPCSTR lpszUrl,
* ERROR_DISK_FULL if the hash table could not be created
*
*/
static
DWORD
URLCache_CreateHashTable
(
LPURLCACHE_HEADER
pHeader
,
entry_hash_table
*
pPrevHash
,
entry_hash_table
**
ppHash
)
static
DWORD
URLCache_CreateHashTable
(
urlcache_header
*
pHeader
,
entry_hash_table
*
pPrevHash
,
entry_hash_table
**
ppHash
)
{
DWORD
dwOffset
,
error
;
int
i
;
...
...
@@ -1590,7 +1587,7 @@ static DWORD URLCache_CreateHashTable(LPURLCACHE_HEADER pHeader, entry_hash_tabl
if
(
pPrevHash
)
pPrevHash
->
next
=
dwOffset
;
else
pHeader
->
dwOffsetFirstHashTable
=
dwOffset
;
pHeader
->
hash_table_off
=
dwOffset
;
(
*
ppHash
)
->
header
.
signature
=
HASH_SIGNATURE
;
(
*
ppHash
)
->
header
.
blocks_used
=
0x20
;
(
*
ppHash
)
->
next
=
0
;
...
...
@@ -1613,9 +1610,9 @@ static DWORD URLCache_CreateHashTable(LPURLCACHE_HEADER pHeader, entry_hash_tabl
* FALSE if there are no more tables to enumerate.
*
*/
static
BOOL
URLCache_EnumHashTables
(
LPCURLCACHE_HEADER
pHeader
,
DWORD
*
id
,
entry_hash_table
**
ppHashEntry
)
static
BOOL
URLCache_EnumHashTables
(
const
urlcache_header
*
pHeader
,
DWORD
*
id
,
entry_hash_table
**
ppHashEntry
)
{
for
(
*
ppHashEntry
=
URLCache_HashEntryFromOffset
(
pHeader
,
pHeader
->
dwOffsetFirstHashTable
);
for
(
*
ppHashEntry
=
URLCache_HashEntryFromOffset
(
pHeader
,
pHeader
->
hash_table_off
);
URLCache_IsHashEntryValid
(
pHeader
,
*
ppHashEntry
);
*
ppHashEntry
=
URLCache_HashEntryFromOffset
(
pHeader
,
(
*
ppHashEntry
)
->
next
))
{
...
...
@@ -1647,7 +1644,7 @@ static BOOL URLCache_EnumHashTables(LPCURLCACHE_HEADER pHeader, DWORD *id, entry
* enumerate.
*
*/
static
BOOL
URLCache_EnumHashTableEntries
(
LPCURLCACHE_HEADER
pHeader
,
const
entry_hash_table
*
pHashEntry
,
static
BOOL
URLCache_EnumHashTableEntries
(
const
urlcache_header
*
pHeader
,
const
entry_hash_table
*
pHashEntry
,
DWORD
*
index
,
const
struct
hash_entry
**
ppHashEntry
)
{
for
(;
*
index
<
HASHTABLE_SIZE
;
(
*
index
)
++
)
...
...
@@ -1742,7 +1739,7 @@ BOOL WINAPI GetUrlCacheEntryInfoExA(
LPVOID
lpReserved
,
DWORD
dwFlags
)
{
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
struct
hash_entry
*
pHashEntry
;
const
entry_header
*
pEntry
;
const
entry_url
*
pUrlEntry
;
...
...
@@ -1882,7 +1879,7 @@ BOOL WINAPI GetUrlCacheEntryInfoExW(
LPVOID
lpReserved
,
DWORD
dwFlags
)
{
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
struct
hash_entry
*
pHashEntry
;
const
entry_header
*
pEntry
;
const
entry_url
*
pUrlEntry
;
...
...
@@ -1987,7 +1984,7 @@ BOOL WINAPI SetUrlCacheEntryInfoA(
LPINTERNET_CACHE_ENTRY_INFOA
lpCacheEntryInfo
,
DWORD
dwFieldControl
)
{
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
struct
hash_entry
*
pHashEntry
;
entry_header
*
pEntry
;
URLCACHECONTAINER
*
pContainer
;
...
...
@@ -2044,7 +2041,7 @@ BOOL WINAPI SetUrlCacheEntryInfoA(
*/
BOOL
WINAPI
SetUrlCacheEntryInfoW
(
LPCWSTR
lpszUrl
,
LPINTERNET_CACHE_ENTRY_INFOW
lpCacheEntryInfo
,
DWORD
dwFieldControl
)
{
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
struct
hash_entry
*
pHashEntry
;
entry_header
*
pEntry
;
URLCACHECONTAINER
*
pContainer
;
...
...
@@ -2107,7 +2104,7 @@ BOOL WINAPI RetrieveUrlCacheEntryFileA(
IN
DWORD
dwReserved
)
{
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
struct
hash_entry
*
pHashEntry
;
entry_header
*
pEntry
;
entry_url
*
pUrlEntry
;
...
...
@@ -2205,7 +2202,7 @@ BOOL WINAPI RetrieveUrlCacheEntryFileW(
IN
DWORD
dwReserved
)
{
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
struct
hash_entry
*
pHashEntry
;
entry_header
*
pEntry
;
entry_url
*
pUrlEntry
;
...
...
@@ -2297,7 +2294,7 @@ BOOL WINAPI RetrieveUrlCacheEntryFileW(
}
static
BOOL
DeleteUrlCacheEntryInternal
(
const
URLCACHECONTAINER
*
pContainer
,
LPURLCACHE_HEADER
pHeader
,
struct
hash_entry
*
pHashEntry
)
urlcache_header
*
pHeader
,
struct
hash_entry
*
pHashEntry
)
{
entry_header
*
pEntry
;
entry_url
*
pUrlEntry
;
...
...
@@ -2354,7 +2351,7 @@ static void handle_full_cache(void)
}
/* Enumerates entries in cache, allows cache unlocking between calls. */
static
BOOL
urlcache_next_entry
(
URLCACHE_HEADER
*
header
,
DWORD
*
hash_table_off
,
DWORD
*
hash_table_entry
,
static
BOOL
urlcache_next_entry
(
urlcache_header
*
header
,
DWORD
*
hash_table_off
,
DWORD
*
hash_table_entry
,
struct
hash_entry
**
hash_entry
,
entry_header
**
entry
)
{
entry_hash_table
*
hashtable_entry
;
...
...
@@ -2363,12 +2360,12 @@ static BOOL urlcache_next_entry(URLCACHE_HEADER *header, DWORD *hash_table_off,
*
entry
=
NULL
;
if
(
!*
hash_table_off
)
{
*
hash_table_off
=
header
->
dwOffsetFirstHashTable
;
*
hash_table_off
=
header
->
hash_table_off
;
*
hash_table_entry
=
0
;
hashtable_entry
=
URLCache_HashEntryFromOffset
(
header
,
*
hash_table_off
);
}
else
{
if
(
*
hash_table_off
>=
header
->
dwFileS
ize
)
{
if
(
*
hash_table_off
>=
header
->
s
ize
)
{
*
hash_table_off
=
0
;
return
FALSE
;
}
...
...
@@ -2517,7 +2514,7 @@ BOOL WINAPI FreeUrlCacheSpaceW(LPCWSTR cache_path, DWORD size, DWORD filter)
LIST_FOR_EACH_ENTRY
(
container
,
&
UrlContainers
,
URLCACHECONTAINER
,
entry
)
{
URLCACHE_HEADER
*
header
;
urlcache_header
*
header
;
struct
hash_entry
*
hash_entry
;
entry_header
*
entry
;
entry_url
*
url_entry
;
...
...
@@ -2541,8 +2538,8 @@ BOOL WINAPI FreeUrlCacheSpaceW(LPCWSTR cache_path, DWORD size, DWORD filter)
urlcache_clean_leaked_entries
(
container
,
header
);
desired_size
=
header
->
CacheL
imit
.
QuadPart
*
(
100
-
size
)
/
100
;
cur_size
=
header
->
CacheUsage
.
QuadPart
+
header
->
ExemptU
sage
.
QuadPart
;
desired_size
=
header
->
cache_l
imit
.
QuadPart
*
(
100
-
size
)
/
100
;
cur_size
=
header
->
cache_usage
.
QuadPart
+
header
->
exempt_u
sage
.
QuadPart
;
if
(
cur_size
<=
desired_size
)
delete_factor
=
0
;
else
...
...
@@ -2598,7 +2595,7 @@ BOOL WINAPI FreeUrlCacheSpaceW(LPCWSTR cache_path, DWORD size, DWORD filter)
TRACE
(
"deleting file: %s
\n
"
,
debugstr_a
((
char
*
)
url_entry
+
url_entry
->
local_name_off
));
DeleteUrlCacheEntryInternal
(
container
,
header
,
hash_entry
);
if
(
header
->
CacheUsage
.
QuadPart
+
header
->
ExemptU
sage
.
QuadPart
<=
desired_size
)
if
(
header
->
cache_usage
.
QuadPart
+
header
->
exempt_u
sage
.
QuadPart
<=
desired_size
)
break
;
/* Allow other threads to use cache while cleaning */
...
...
@@ -2613,8 +2610,8 @@ BOOL WINAPI FreeUrlCacheSpaceW(LPCWSTR cache_path, DWORD size, DWORD filter)
}
TRACE
(
"cache size after cleaning 0x%s/0x%s
\n
"
,
wine_dbgstr_longlong
(
header
->
CacheUsage
.
QuadPart
+
header
->
ExemptU
sage
.
QuadPart
),
wine_dbgstr_longlong
(
header
->
CacheL
imit
.
QuadPart
));
wine_dbgstr_longlong
(
header
->
cache_usage
.
QuadPart
+
header
->
exempt_u
sage
.
QuadPart
),
wine_dbgstr_longlong
(
header
->
cache_l
imit
.
QuadPart
));
cache_container_unlock_index
(
container
,
header
);
}
...
...
@@ -2645,7 +2642,7 @@ BOOL WINAPI UnlockUrlCacheEntryFileA(
IN
DWORD
dwReserved
)
{
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
struct
hash_entry
*
pHashEntry
;
entry_header
*
pEntry
;
entry_url
*
pUrlEntry
;
...
...
@@ -2721,7 +2718,7 @@ BOOL WINAPI UnlockUrlCacheEntryFileA(
*/
BOOL
WINAPI
UnlockUrlCacheEntryFileW
(
LPCWSTR
lpszUrlName
,
DWORD
dwReserved
)
{
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
struct
hash_entry
*
pHashEntry
;
entry_header
*
pEntry
;
entry_url
*
pUrlEntry
;
...
...
@@ -2851,7 +2848,7 @@ BOOL WINAPI CreateUrlCacheEntryW(
)
{
URLCACHECONTAINER
*
pContainer
;
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
CHAR
szFile
[
MAX_PATH
];
WCHAR
szExtension
[
MAX_PATH
];
LPCWSTR
lpszUrlPart
;
...
...
@@ -2947,8 +2944,8 @@ BOOL WINAPI CreateUrlCacheEntryW(
if
(
!
(
pHeader
=
cache_container_lock_index
(
pContainer
)))
return
FALSE
;
if
(
pHeader
->
DirectoryCount
)
CacheDir
=
(
BYTE
)(
rand
()
%
pHeader
->
DirectoryCount
);
if
(
pHeader
->
dirs_no
)
CacheDir
=
(
BYTE
)(
rand
()
%
pHeader
->
dirs_no
);
else
CacheDir
=
CACHE_CONTAINER_NO_SUBDIR
;
...
...
@@ -3072,7 +3069,7 @@ static BOOL CommitUrlCacheEntryInternal(
)
{
URLCACHECONTAINER
*
pContainer
;
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
struct
hash_entry
*
pHashEntry
;
entry_header
*
pEntry
;
entry_url
*
pUrlEntry
;
...
...
@@ -3163,7 +3160,7 @@ static BOOL CommitUrlCacheEntryInternal(
DeleteUrlCacheEntryInternal
(
pContainer
,
pHeader
,
pHashEntry
);
}
if
(
pHeader
->
DirectoryCount
)
if
(
pHeader
->
dirs_no
)
cDirectory
=
0
;
else
cDirectory
=
CACHE_CONTAINER_NO_SUBDIR
;
...
...
@@ -3185,11 +3182,11 @@ static BOOL CommitUrlCacheEntryInternal(
WideCharToMultiByte
(
CP_ACP
,
0
,
lpszLocalFileName
,
-
1
,
achFile
,
MAX_PATH
,
NULL
,
NULL
);
pchLocalFileName
=
achFile
;
if
(
pHeader
->
DirectoryCount
)
if
(
pHeader
->
dirs_no
)
{
for
(
cDirectory
=
0
;
cDirectory
<
pHeader
->
DirectoryCount
;
cDirectory
++
)
for
(
cDirectory
=
0
;
cDirectory
<
pHeader
->
dirs_no
;
cDirectory
++
)
{
if
(
!
strncmp
(
pHeader
->
directory_data
[
cDirectory
].
file
name
,
pchLocalFileName
,
DIR_LENGTH
))
if
(
!
strncmp
(
pHeader
->
directory_data
[
cDirectory
].
name
,
pchLocalFileName
,
DIR_LENGTH
))
{
bFound
=
TRUE
;
break
;
...
...
@@ -3301,14 +3298,14 @@ static BOOL CommitUrlCacheEntryInternal(
URLCache_DeleteEntry
(
pHeader
,
&
pUrlEntry
->
header
);
else
{
if
(
pUrlEntry
->
cache_dir
<
pHeader
->
DirectoryCount
)
pHeader
->
directory_data
[
pUrlEntry
->
cache_dir
].
dwNumFiles
++
;
if
(
pUrlEntry
->
cache_dir
<
pHeader
->
dirs_no
)
pHeader
->
directory_data
[
pUrlEntry
->
cache_dir
].
files_no
++
;
if
(
CacheEntryType
&
STICKY_CACHE_ENTRY
)
pHeader
->
ExemptU
sage
.
QuadPart
+=
file_size
.
QuadPart
;
pHeader
->
exempt_u
sage
.
QuadPart
+=
file_size
.
QuadPart
;
else
pHeader
->
CacheU
sage
.
QuadPart
+=
file_size
.
QuadPart
;
if
(
pHeader
->
CacheUsage
.
QuadPart
+
pHeader
->
ExemptU
sage
.
QuadPart
>
pHeader
->
CacheL
imit
.
QuadPart
)
pHeader
->
cache_u
sage
.
QuadPart
+=
file_size
.
QuadPart
;
if
(
pHeader
->
cache_usage
.
QuadPart
+
pHeader
->
exempt_u
sage
.
QuadPart
>
pHeader
->
cache_l
imit
.
QuadPart
)
handle_full_cache
();
}
...
...
@@ -3635,7 +3632,7 @@ BOOL WINAPI UnlockUrlCacheEntryStream(
BOOL
WINAPI
DeleteUrlCacheEntryA
(
LPCSTR
lpszUrlName
)
{
URLCACHECONTAINER
*
pContainer
;
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
struct
hash_entry
*
pHashEntry
;
DWORD
error
;
BOOL
ret
;
...
...
@@ -3681,7 +3678,7 @@ BOOL WINAPI DeleteUrlCacheEntryA(LPCSTR lpszUrlName)
BOOL
WINAPI
DeleteUrlCacheEntryW
(
LPCWSTR
lpszUrlName
)
{
URLCACHECONTAINER
*
pContainer
;
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
struct
hash_entry
*
pHashEntry
;
LPSTR
urlA
;
DWORD
error
;
...
...
@@ -3949,7 +3946,7 @@ static BOOL FindNextUrlCacheEntryInternal(
for
(;
URLCacheContainers_Enum
(
pEntryHandle
->
lpszUrlSearchPattern
,
pEntryHandle
->
dwContainerIndex
,
&
pContainer
);
pEntryHandle
->
dwContainerIndex
++
,
pEntryHandle
->
dwHashTableIndex
=
0
)
{
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
entry_hash_table
*
pHashTableEntry
;
DWORD
error
;
...
...
@@ -4281,7 +4278,7 @@ static BOOL IsUrlCacheEntryExpiredInternal(const entry_url *pUrlEntry,
*/
BOOL
WINAPI
IsUrlCacheEntryExpiredA
(
LPCSTR
url
,
DWORD
dwFlags
,
FILETIME
*
pftLastModified
)
{
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
struct
hash_entry
*
pHashEntry
;
const
entry_header
*
pEntry
;
const
entry_url
*
pUrlEntry
;
...
...
@@ -4349,7 +4346,7 @@ BOOL WINAPI IsUrlCacheEntryExpiredA( LPCSTR url, DWORD dwFlags, FILETIME* pftLas
*/
BOOL
WINAPI
IsUrlCacheEntryExpiredW
(
LPCWSTR
url
,
DWORD
dwFlags
,
FILETIME
*
pftLastModified
)
{
LPURLCACHE_HEADER
pHeader
;
urlcache_header
*
pHeader
;
struct
hash_entry
*
pHashEntry
;
const
entry_header
*
pEntry
;
const
entry_url
*
pUrlEntry
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment