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
2ed3c407
Commit
2ed3c407
authored
May 14, 2005
by
Gerold Jens Wucherpfennig
Committed by
Alexandre Julliard
May 14, 2005
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Initial FCI work (FCICreate and FCIDestroy).
parent
19312f30
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
130 additions
and
13 deletions
+130
-13
cabinet.h
dlls/cabinet/cabinet.h
+15
-1
fci.c
dlls/cabinet/fci.c
+115
-12
No files found.
dlls/cabinet/cabinet.h
View file @
2ed3c407
...
...
@@ -2,6 +2,7 @@
* cabinet.h
*
* Copyright 2002 Greg Turner
* Copyright 2005 Gerold Jens Wucherpfennig
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
...
...
@@ -292,6 +293,19 @@ typedef struct cds_forward {
typedef
struct
{
unsigned
int
FCI_Intmagic
;
PERF
perf
;
PFNFCIFILEPLACED
pfnfiledest
;
PFNFCIALLOC
pfnalloc
;
PFNFCIFREE
pfnfree
;
PFNFCIOPEN
pfnopen
;
PFNFCIREAD
pfnread
;
PFNFCIWRITE
pfnwrite
;
PFNFCICLOSE
pfnclose
;
PFNFCISEEK
pfnseek
;
PFNFCIDELETE
pfndelete
;
PFNFCIGETTEMPFILE
pfnfcigtf
;
PCCAB
pccab
;
void
*
pv
;
}
FCI_Int
,
*
PFCI_Int
;
typedef
struct
{
...
...
@@ -307,7 +321,7 @@ typedef struct {
}
FDI_Int
,
*
PFDI_Int
;
/* cast an HFCI into a PFCI_Int */
#define PFCI_INT(hfci) ((PF
D
I_Int)(hfci))
#define PFCI_INT(hfci) ((PF
C
I_Int)(hfci))
/* cast an HFDI into a PFDI_Int */
#define PFDI_INT(hfdi) ((PFDI_Int)(hfdi))
...
...
dlls/cabinet/fci.c
View file @
2ed3c407
...
...
@@ -2,6 +2,7 @@
* File Compression Interface
*
* Copyright 2002 Patrik Stridvall
* Copyright 2005 Gerold Jens Wucherpfennig
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
...
...
@@ -26,6 +27,7 @@
#include "winbase.h"
#include "winerror.h"
#include "fci.h"
#include "cabinet.h"
#include "wine/debug.h"
...
...
@@ -33,12 +35,55 @@ WINE_DEFAULT_DEBUG_CHANNEL(cabinet);
/***********************************************************************
* FCICreate (CABINET.10)
*
* Provided with several callbacks,
* returns a handle which can be used to perform operations
* on cabinet files.
*
* PARAMS
* perf [IO] A pointer to an ERF structure. When FCICreate
* returns an error condition, error information may
* be found here as well as from GetLastError.
* pfnfiledest [I] A pointer to a function which is called when a file
* is placed. Only useful for subsequent cabinet files.
* pfnalloc [I] A pointer to a function which allocates ram. Uses
* the same interface as malloc.
* pfnfree [I] A pointer to a function which frees ram. Uses the
* same interface as free.
* pfnopen [I] A pointer to a function which opens a file. Uses
* the same interface as _open.
* pfnread [I] A pointer to a function which reads from a file into
* a caller-provided buffer. Uses the same interface
* as _read
* pfnwrite [I] A pointer to a function which writes to a file from
* a caller-provided buffer. Uses the same interface
* as _write.
* pfnclose [I] A pointer to a function which closes a file handle.
* Uses the same interface as _close.
* pfnseek [I] A pointer to a function which seeks in a file.
* Uses the same interface as _lseek.
* pfndelete [I] A pointer to a function which deletes a file.
* pfnfcigtf [I] A pointer to a function which gets the name of a
* temporary file; ignored in wine
* pccab [I] A pointer to an initialized CCAB structure
* pv [I] A pointer to an application-defined notification
* function which will be passed to other FCI functions
* as a parameter.
*
* RETURNS
* On success, returns an FCI handle of type HFCI.
* On failure, the NULL file handle is returned. Error
* info can be retrieved from perf.
*
* INCLUDES
* fci.h
*
*/
HFCI
__cdecl
FCICreate
(
PERF
perf
,
PFNFCIFILEPLACED
pfnf
cifp
,
PFNFCIALLOC
pfna
,
PFNFCIFREE
pfnf
,
PFNFCIFILEPLACED
pfnf
iledest
,
PFNFCIALLOC
pfna
lloc
,
PFNFCIFREE
pfnf
ree
,
PFNFCIOPEN
pfnopen
,
PFNFCIREAD
pfnread
,
PFNFCIWRITE
pfnwrite
,
...
...
@@ -49,17 +94,57 @@ HFCI __cdecl FCICreate(
PCCAB
pccab
,
void
*
pv
)
{
FIXME
(
"(%p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p): stub
\n
"
,
perf
,
pfnfcifp
,
pfna
,
pfnf
,
pfnopen
,
pfnread
,
pfnwrite
,
pfnclose
,
pfnseek
,
pfndelete
,
pfnfcigtf
,
pccab
,
pv
);
HFCI
rv
;
if
((
!
pfnalloc
)
||
(
!
pfnfree
))
{
perf
->
erfOper
=
FCIERR_NONE
;
perf
->
erfType
=
0
;
perf
->
erfType
=
ERROR_BAD_ARGUMENTS
;
perf
->
fError
=
TRUE
;
SetLastError
(
ERROR_CALL_NOT_IMPLEMENTED
);
SetLastError
(
ERROR_BAD_ARGUMENTS
);
return
NULL
;
}
if
(
!
(
rv
=
(
HFCI
)
(
*
pfnalloc
)(
sizeof
(
FCI_Int
))))
{
perf
->
erfOper
=
FCIERR_ALLOC_FAIL
;
perf
->
erfType
=
ERROR_NOT_ENOUGH_MEMORY
;
perf
->
fError
=
TRUE
;
SetLastError
(
ERROR_NOT_ENOUGH_MEMORY
);
return
NULL
;
}
PFCI_INT
(
rv
)
->
FCI_Intmagic
=
FCI_INT_MAGIC
;
PFCI_INT
(
rv
)
->
perf
=
perf
;
PFCI_INT
(
rv
)
->
pfnfiledest
=
pfnfiledest
;
PFCI_INT
(
rv
)
->
pfnalloc
=
pfnalloc
;
PFCI_INT
(
rv
)
->
pfnfree
=
pfnfree
;
PFCI_INT
(
rv
)
->
pfnopen
=
pfnopen
;
PFCI_INT
(
rv
)
->
pfnread
=
pfnread
;
PFCI_INT
(
rv
)
->
pfnwrite
=
pfnwrite
;
PFCI_INT
(
rv
)
->
pfnclose
=
pfnclose
;
PFCI_INT
(
rv
)
->
pfnseek
=
pfnseek
;
PFCI_INT
(
rv
)
->
pfndelete
=
pfndelete
;
PFCI_INT
(
rv
)
->
pfnfcigtf
=
pfnfcigtf
;
PFCI_INT
(
rv
)
->
pccab
=
pccab
;
PFCI_INT
(
rv
)
->
pv
=
pv
;
/* Still mark as incomplete, because of other missing FCI* APIs */
PFCI_INT
(
rv
)
->
FCI_Intmagic
=
0
;
PFDI_FREE
(
rv
,
rv
);
FIXME
(
"(%p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p): stub
\n
"
,
perf
,
pfnfiledest
,
pfnalloc
,
pfnfree
,
pfnopen
,
pfnread
,
pfnwrite
,
pfnclose
,
pfnseek
,
pfndelete
,
pfnfcigtf
,
pccab
,
pv
);
perf
->
erfOper
=
FCIERR_NONE
;
perf
->
erfType
=
0
;
perf
->
fError
=
TRUE
;
SetLastError
(
ERROR_CALL_NOT_IMPLEMENTED
);
return
NULL
;
}
/***********************************************************************
...
...
@@ -116,12 +201,30 @@ BOOL __cdecl FCIFlushFolder(
/***********************************************************************
* FCIDestroy (CABINET.14)
*
* Frees a handle created by FCICreate.
* Only reason for failure would be an invalid handle.
*
* PARAMS
* hfci [I] The HFCI to free
*
* RETURNS
* TRUE for success
* FALSE for failure
*/
BOOL
__cdecl
FCIDestroy
(
HFCI
hfci
)
{
FIXME
(
"(%p): stub
\n
"
,
hfci
);
SetLastError
(
ERROR_CALL_NOT_IMPLEMENTED
);
if
(
REALLY_IS_FCI
(
hfci
))
{
PFCI_INT
(
hfci
)
->
FCI_Intmagic
=
0
;
PFDI_FREE
(
hfci
,
hfci
);
/*return TRUE; */
}
else
{
SetLastError
(
ERROR_INVALID_HANDLE
);
return
FALSE
;
}
/* Still mark as incomplete, because of other missing FCI* APIs */
FIXME
(
"(%p): stub
\n
"
,
hfci
);
SetLastError
(
ERROR_CALL_NOT_IMPLEMENTED
);
return
FALSE
;
}
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