2 * Copyright 2012 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
6 * Paweł Dziepak, pdziepak@quarnos.org
10 #include "RequestInterpreter.h"
14 #include <util/kernel_cpp.h>
17 RequestInterpreter::RequestInterpreter(RPC::CallbackRequest
* request
)
21 fOperationCount
= fRequest
->Stream().GetUInt();
25 RequestInterpreter::~RequestInterpreter()
32 RequestInterpreter::GetAttr(FileHandle
* handle
, int* _mask
)
34 if (fLastOperation
!= OpCallbackGetAttr
)
38 const void* ptr
= fRequest
->Stream().GetOpaque(&size
);
40 memcpy(handle
->fData
, ptr
, size
);
42 uint32 count
= fRequest
->Stream().GetUInt();
45 return fRequest
->Stream().IsEOF() ? B_BAD_VALUE
: B_OK
;
48 uint32 bitmap
= fRequest
->Stream().GetUInt();
51 if ((bitmap
& (1 << FATTR4_CHANGE
)) != 0)
52 mask
|= CallbackAttrChange
;
53 if ((bitmap
& (1 << FATTR4_SIZE
)) != 0)
54 mask
|= CallbackAttrSize
;
58 for (uint32 i
= 1; i
< count
; i
++)
59 fRequest
->Stream().GetUInt();
61 return fRequest
->Stream().IsEOF() ? B_BAD_VALUE
: B_OK
;
66 RequestInterpreter::Recall(FileHandle
* handle
, bool& truncate
, uint32
* stateSeq
,
69 if (fLastOperation
!= OpCallbackRecall
)
72 *stateSeq
= fRequest
->Stream().GetUInt();
73 stateID
[0] = fRequest
->Stream().GetUInt();
74 stateID
[1] = fRequest
->Stream().GetUInt();
75 stateID
[2] = fRequest
->Stream().GetUInt();
77 truncate
= fRequest
->Stream().GetBoolean();
80 const void* ptr
= fRequest
->Stream().GetOpaque(&size
);
82 memcpy(handle
->fData
, ptr
, size
);
84 return fRequest
->Stream().IsEOF() ? B_BAD_VALUE
: B_OK
;