1 /*
2  * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "parcel.h"
17 #include <climits>
18 #include "securec.h"
19 #include "utils_log.h"
20 
21 namespace OHOS {
22 
Parcelable()23 Parcelable::Parcelable() : Parcelable(false)
24 {}
25 
Parcelable(bool asRemote)26 Parcelable::Parcelable(bool asRemote)
27 {
28 }
29 
Parcel(Allocator * allocator)30 Parcel::Parcel(Allocator *allocator)
31 {
32 }
33 
Parcel()34 Parcel::Parcel() : Parcel(new DefaultAllocator())
35 {}
36 
~Parcel()37 Parcel::~Parcel()
38 {
39 }
40 
GetWritableBytes() const41 size_t Parcel::GetWritableBytes() const
42 {
43     return {};
44 }
45 
GetReadableBytes() const46 size_t Parcel::GetReadableBytes() const
47 {
48     return {};
49 }
50 
CalcNewCapacity(size_t minNewCapacity)51 size_t Parcel::CalcNewCapacity(size_t minNewCapacity)
52 {
53     return {};
54 }
55 
EnsureWritableCapacity(size_t desireCapacity)56 bool Parcel::EnsureWritableCapacity(size_t desireCapacity)
57 {
58     return {};
59 }
60 
GetDataSize() const61 size_t Parcel::GetDataSize() const
62 {
63     return {};
64 }
65 
GetData() const66 uintptr_t Parcel::GetData() const
67 {
68     return {};
69 }
70 
GetObjectOffsets() const71 binder_size_t Parcel::GetObjectOffsets() const
72 {
73     return {};
74 }
75 
GetOffsetsSize() const76 size_t Parcel::GetOffsetsSize() const
77 {
78     return {};
79 }
80 
GetDataCapacity() const81 size_t Parcel::GetDataCapacity() const
82 {
83     return {};
84 }
85 
GetMaxCapacity() const86 size_t Parcel::GetMaxCapacity() const
87 {
88     return {};
89 }
90 
SetMaxCapacity(size_t maxCapacity)91 bool Parcel::SetMaxCapacity(size_t maxCapacity)
92 {
93     return {};
94 }
95 
SetAllocator(Allocator * allocator)96 bool Parcel::SetAllocator(Allocator *allocator)
97 {
98     return {};
99 }
100 
CheckOffsets()101 bool Parcel::CheckOffsets()
102 {
103     return {};
104 }
105 
InjectOffsets(binder_size_t offsets,size_t offsetSize)106 void Parcel::InjectOffsets(binder_size_t offsets, size_t offsetSize)
107 {
108 }
109 
FlushBuffer()110 void Parcel::FlushBuffer()
111 {
112 }
113 
SetDataCapacity(size_t newCapacity)114 bool Parcel::SetDataCapacity(size_t newCapacity)
115 {
116     return {};
117 }
118 
SetDataSize(size_t dataSize)119 bool Parcel::SetDataSize(size_t dataSize)
120 {
121     return {};
122 }
123 
WriteDataBytes(const void * data,size_t size)124 bool Parcel::WriteDataBytes(const void *data, size_t size)
125 {
126     return {};
127 }
128 
WritePadBytes(size_t padSize)129 void Parcel::WritePadBytes(size_t padSize)
130 {
131 }
132 
WriteBuffer(const void * data,size_t size)133 bool Parcel::WriteBuffer(const void *data, size_t size)
134 {
135     return {};
136 }
137 
WriteBufferAddTerminator(const void * data,size_t size,size_t typeSize)138 bool Parcel::WriteBufferAddTerminator(const void *data, size_t size, size_t typeSize)
139 {
140     return {};
141 }
142 
WriteUnpadBuffer(const void * data,size_t size)143 bool Parcel::WriteUnpadBuffer(const void *data, size_t size)
144 {
145     return {};
146 }
147 
148 template <typename T>
Write(T value)149 bool Parcel::Write(T value)
150 {
151     return {};
152 }
153 
WriteBool(bool value)154 bool Parcel::WriteBool(bool value)
155 {
156     return Write<int32_t>(static_cast<int32_t>(value));
157 }
158 
WriteBoolUnaligned(bool value)159 bool Parcel::WriteBoolUnaligned(bool value)
160 {
161     return Write<bool>(value);
162 }
163 
WriteInt8(int8_t value)164 bool Parcel::WriteInt8(int8_t value)
165 {
166     return Write<int32_t>(static_cast<int32_t>(value));
167 }
168 
WriteInt8Unaligned(int8_t value)169 bool Parcel::WriteInt8Unaligned(int8_t value)
170 {
171     return Write<int8_t>(value);
172 }
173 
WriteInt16(int16_t value)174 bool Parcel::WriteInt16(int16_t value)
175 {
176     return Write<int32_t>(static_cast<int32_t>(value));
177 }
178 
WriteInt16Unaligned(int16_t value)179 bool Parcel::WriteInt16Unaligned(int16_t value)
180 {
181     return Write<int16_t>(value);
182 }
183 
WriteInt32(int32_t value)184 bool Parcel::WriteInt32(int32_t value)
185 {
186     return Write<int32_t>(value);
187 }
188 
WriteInt64(int64_t value)189 bool Parcel::WriteInt64(int64_t value)
190 {
191     return Write<int64_t>(value);
192 }
193 
WriteUint8(uint8_t value)194 bool Parcel::WriteUint8(uint8_t value)
195 {
196     return Write<uint32_t>(static_cast<uint32_t>(value));
197 }
198 
WriteUint8Unaligned(uint8_t value)199 bool Parcel::WriteUint8Unaligned(uint8_t value)
200 {
201     return Write<uint8_t>(value);
202 }
203 
WriteUint16(uint16_t value)204 bool Parcel::WriteUint16(uint16_t value)
205 {
206     return Write<uint32_t>(static_cast<uint32_t>(value));
207 }
208 
WriteUint16Unaligned(uint16_t value)209 bool Parcel::WriteUint16Unaligned(uint16_t value)
210 {
211     return Write<uint16_t>(value);
212 }
213 
WriteUint32(uint32_t value)214 bool Parcel::WriteUint32(uint32_t value)
215 {
216     return Write<uint32_t>(value);
217 }
218 
WriteUint64(uint64_t value)219 bool Parcel::WriteUint64(uint64_t value)
220 {
221     return Write<uint64_t>(value);
222 }
223 
WriteFloat(float value)224 bool Parcel::WriteFloat(float value)
225 {
226     return Write<float>(value);
227 }
228 
WriteDouble(double value)229 bool Parcel::WriteDouble(double value)
230 {
231     return Write<double>(value);
232 }
233 
WritePointer(uintptr_t value)234 bool Parcel::WritePointer(uintptr_t value)
235 {
236     return Write<binder_uintptr_t>(value);
237 }
238 
WriteCString(const char * value)239 bool Parcel::WriteCString(const char *value)
240 {
241     return {};
242 }
243 
WriteString(const std::string & value)244 bool Parcel::WriteString(const std::string &value)
245 {
246     return {};
247 }
248 
WriteString16(const std::u16string & value)249 bool Parcel::WriteString16(const std::u16string &value)
250 {
251     return {};
252 }
253 
WriteString16WithLength(const char16_t * value,size_t len)254 bool Parcel::WriteString16WithLength(const char16_t *value, size_t len)
255 {
256     return {};
257 }
258 
WriteString8WithLength(const char * value,size_t len)259 bool Parcel::WriteString8WithLength(const char *value, size_t len)
260 {
261     return {};
262 }
263 
EnsureObjectsCapacity()264 bool Parcel::EnsureObjectsCapacity()
265 {
266     return {};
267 }
268 
WriteObjectOffset(binder_size_t offset)269 bool Parcel::WriteObjectOffset(binder_size_t offset)
270 {
271     return {};
272 }
273 
WriteRemoteObject(const Parcelable * object)274 bool Parcel::WriteRemoteObject(const Parcelable *object)
275 {
276     return {};
277 }
278 
WriteParcelable(const Parcelable * object)279 bool Parcel::WriteParcelable(const Parcelable *object)
280 {
281     return {};
282 }
283 
WriteStrongParcelable(const sptr<Parcelable> & object)284 bool Parcel::WriteStrongParcelable(const sptr<Parcelable> &object)
285 {
286     return {};
287 }
288 
289 template <typename T>
Read(T & value)290 bool Parcel::Read(T &value)
291 {
292     return {};
293 }
294 
295 template <typename T>
Read()296 T Parcel::Read()
297 {
298     return {};
299 }
300 
ParseFrom(uintptr_t data,size_t size)301 bool Parcel::ParseFrom(uintptr_t data, size_t size)
302 {
303     return {};
304 }
305 
ReadBuffer(size_t length)306 const uint8_t *Parcel::ReadBuffer(size_t length)
307 {
308     return {};
309 }
310 
ReadUnpadBuffer(size_t length)311 const uint8_t *Parcel::ReadUnpadBuffer(size_t length)
312 {
313     return {};
314 }
315 
SkipBytes(size_t bytes)316 void Parcel::SkipBytes(size_t bytes)
317 {
318 }
319 
GetReadPosition()320 size_t Parcel::GetReadPosition()
321 {
322     return {};
323 }
324 
RewindRead(size_t newPosition)325 bool Parcel::RewindRead(size_t newPosition)
326 {
327     return {};
328 }
329 
GetWritePosition()330 size_t Parcel::GetWritePosition()
331 {
332     return {};
333 }
334 
RewindWrite(size_t newPosition)335 bool Parcel::RewindWrite(size_t newPosition)
336 {
337     return {};
338 }
339 
ReadBool()340 bool Parcel::ReadBool()
341 {
342     int32_t temp = Read<int32_t>();
343     return (temp != 0);
344 }
345 
ReadBoolUnaligned()346 bool Parcel::ReadBoolUnaligned()
347 {
348     return Read<bool>();
349 }
350 
ReadInt8()351 int8_t Parcel::ReadInt8()
352 {
353     int32_t temp = Read<int32_t>();
354     return static_cast<int8_t>(temp);
355 }
356 
ReadInt16()357 int16_t Parcel::ReadInt16()
358 {
359     int32_t temp = Read<int32_t>();
360     return static_cast<int16_t>(temp);
361 }
362 
ReadInt32()363 int32_t Parcel::ReadInt32()
364 {
365     return Read<int32_t>();
366 }
367 
ReadInt64()368 int64_t Parcel::ReadInt64()
369 {
370     return Read<int64_t>();
371 }
372 
ReadUint8()373 uint8_t Parcel::ReadUint8()
374 {
375     uint32_t temp = Read<uint32_t>();
376     return static_cast<uint8_t>(temp);
377 }
378 
ReadUint16()379 uint16_t Parcel::ReadUint16()
380 {
381     uint32_t temp = Read<uint32_t>();
382     return static_cast<uint16_t>(temp);
383 }
384 
ReadUint32()385 uint32_t Parcel::ReadUint32()
386 {
387     return Read<uint32_t>();
388 }
389 
ReadUint64()390 uint64_t Parcel::ReadUint64()
391 {
392     return Read<uint64_t>();
393 }
394 
ReadFloat()395 float Parcel::ReadFloat()
396 {
397     return Read<float>();
398 }
399 
ReadDouble()400 double Parcel::ReadDouble()
401 {
402     return Read<double>();
403 }
404 
405 template <typename T>
ReadPadded(T & value)406 bool Parcel::ReadPadded(T &value)
407 {
408     return {};
409 }
410 
ReadBool(bool & value)411 bool Parcel::ReadBool(bool &value)
412 {
413     return ReadPadded<bool>(value);
414 }
415 
ReadInt8(int8_t & value)416 bool Parcel::ReadInt8(int8_t &value)
417 {
418     return ReadPadded<int8_t>(value);
419 }
420 
ReadInt8Unaligned(int8_t & value)421 bool Parcel::ReadInt8Unaligned(int8_t &value)
422 {
423     return Read<int8_t>(value);
424 }
425 
ReadInt16(int16_t & value)426 bool Parcel::ReadInt16(int16_t &value)
427 {
428     return ReadPadded<int16_t>(value);
429 }
430 
ReadInt16Unaligned(int16_t & value)431 bool Parcel::ReadInt16Unaligned(int16_t &value)
432 {
433     return Read<int16_t>(value);
434 }
435 
ReadInt32(int32_t & value)436 bool Parcel::ReadInt32(int32_t &value)
437 {
438     return Read<int32_t>(value);
439 }
440 
ReadInt64(int64_t & value)441 bool Parcel::ReadInt64(int64_t &value)
442 {
443     return Read<int64_t>(value);
444 }
445 
ReadUint8(uint8_t & value)446 bool Parcel::ReadUint8(uint8_t &value)
447 {
448     return ReadPadded<uint8_t>(value);
449 }
450 
ReadUint8Unaligned(uint8_t & value)451 bool Parcel::ReadUint8Unaligned(uint8_t &value)
452 {
453     return Read<uint8_t>(value);
454 }
455 
ReadUint16(uint16_t & value)456 bool Parcel::ReadUint16(uint16_t &value)
457 {
458     return ReadPadded<uint16_t>(value);
459 }
460 
ReadUint16Unaligned(uint16_t & value)461 bool Parcel::ReadUint16Unaligned(uint16_t &value)
462 {
463     return Read<uint16_t>(value);
464 }
465 
ReadUint32(uint32_t & value)466 bool Parcel::ReadUint32(uint32_t &value)
467 {
468     return Read<uint32_t>(value);
469 }
470 
ReadUint64(uint64_t & value)471 bool Parcel::ReadUint64(uint64_t &value)
472 {
473     return Read<uint64_t>(value);
474 }
475 
ReadFloat(float & value)476 bool Parcel::ReadFloat(float &value)
477 {
478     return Read<float>(value);
479 }
480 
ReadDouble(double & value)481 bool Parcel::ReadDouble(double &value)
482 {
483     return Read<double>(value);
484 }
485 
ReadPointer()486 uintptr_t Parcel::ReadPointer()
487 {
488     return Read<binder_uintptr_t>();
489 }
490 
ReadCString()491 const char *Parcel::ReadCString()
492 {
493     return {};
494 }
495 
ReadString()496 const std::string Parcel::ReadString()
497 {
498     return {};
499 }
500 
ReadString(std::string & value)501 bool Parcel::ReadString(std::string &value)
502 {
503     return {};
504 }
505 
ReadString16()506 const std::u16string Parcel::ReadString16()
507 {
508     return {};
509 }
510 
ReadString16(std::u16string & value)511 bool Parcel::ReadString16(std::u16string &value)
512 {
513     return {};
514 }
515 
ReadString16WithLength(int32_t & readLength)516 const std::u16string Parcel::ReadString16WithLength(int32_t &readLength)
517 {
518     return {};
519 }
520 
ReadString8WithLength(int32_t & readLength)521 const std::string Parcel::ReadString8WithLength(int32_t &readLength)
522 {
523     return {};
524 }
525 
Alloc(size_t size)526 void *DefaultAllocator::Alloc(size_t size)
527 {
528     return nullptr;
529 }
530 
Dealloc(void * data)531 void DefaultAllocator::Dealloc(void *data)
532 {
533     if (data != nullptr) {
534         free(data);
535     }
536 }
537 
Realloc(void * data,size_t newSize)538 void *DefaultAllocator::Realloc(void *data, size_t newSize)
539 {
540     return nullptr;
541 }
542 
543 template <typename T1, typename T2>
WriteVector(const std::vector<T1> & val,bool (Parcel::* Write)(T2))544 bool Parcel::WriteVector(const std::vector<T1> &val, bool (Parcel::*Write)(T2))
545 {
546     return {};
547 }
548 
WriteBoolVector(const std::vector<bool> & val)549 bool Parcel::WriteBoolVector(const std::vector<bool> &val)
550 {
551     return WriteVector(val, &Parcel::WriteBool);
552 }
553 
WriteInt8Vector(const std::vector<int8_t> & val)554 bool Parcel::WriteInt8Vector(const std::vector<int8_t> &val)
555 {
556     return WriteVector(val, &Parcel::WriteInt8Unaligned);
557 }
558 
WriteInt16Vector(const std::vector<int16_t> & val)559 bool Parcel::WriteInt16Vector(const std::vector<int16_t> &val)
560 {
561     return WriteVector(val, &Parcel::WriteInt16);
562 }
563 
WriteInt32Vector(const std::vector<int32_t> & val)564 bool Parcel::WriteInt32Vector(const std::vector<int32_t> &val)
565 {
566     return WriteVector(val, &Parcel::WriteInt32);
567 }
568 
WriteInt64Vector(const std::vector<int64_t> & val)569 bool Parcel::WriteInt64Vector(const std::vector<int64_t> &val)
570 {
571     return WriteVector(val, &Parcel::WriteInt64);
572 }
573 
WriteUInt8Vector(const std::vector<uint8_t> & val)574 bool Parcel::WriteUInt8Vector(const std::vector<uint8_t> &val)
575 {
576     return WriteVector(val, &Parcel::WriteUint8Unaligned);
577 }
578 
WriteUInt16Vector(const std::vector<uint16_t> & val)579 bool Parcel::WriteUInt16Vector(const std::vector<uint16_t> &val)
580 {
581     return WriteVector(val, &Parcel::WriteUint16Unaligned);
582 }
583 
WriteUInt32Vector(const std::vector<uint32_t> & val)584 bool Parcel::WriteUInt32Vector(const std::vector<uint32_t> &val)
585 {
586     return WriteVector(val, &Parcel::WriteUint32);
587 }
588 
WriteUInt64Vector(const std::vector<uint64_t> & val)589 bool Parcel::WriteUInt64Vector(const std::vector<uint64_t> &val)
590 {
591     return WriteVector(val, &Parcel::WriteUint64);
592 }
593 
WriteFloatVector(const std::vector<float> & val)594 bool Parcel::WriteFloatVector(const std::vector<float> &val)
595 {
596     return WriteVector(val, &Parcel::WriteFloat);
597 }
598 
WriteDoubleVector(const std::vector<double> & val)599 bool Parcel::WriteDoubleVector(const std::vector<double> &val)
600 {
601     return WriteVector(val, &Parcel::WriteDouble);
602 }
603 
WriteStringVector(const std::vector<std::string> & val)604 bool Parcel::WriteStringVector(const std::vector<std::string> &val)
605 {
606     return WriteVector(val, &Parcel::WriteString);
607 }
608 
WriteString16Vector(const std::vector<std::u16string> & val)609 bool Parcel::WriteString16Vector(const std::vector<std::u16string> &val)
610 {
611     return WriteVector(val, &Parcel::WriteString16);
612 }
613 
614 template <typename T>
ReadVector(std::vector<T> * val,bool (Parcel::* Read)(T &))615 bool Parcel::ReadVector(std::vector<T> *val, bool (Parcel::*Read)(T &))
616 {
617     return {};
618 }
619 
ReadBoolVector(std::vector<bool> * val)620 bool Parcel::ReadBoolVector(std::vector<bool> *val)
621 {
622     return {};
623 }
624 
ReadInt8Vector(std::vector<int8_t> * val)625 bool Parcel::ReadInt8Vector(std::vector<int8_t> *val)
626 {
627     return ReadVector(val, &Parcel::ReadInt8Unaligned);
628 }
629 
ReadInt16Vector(std::vector<int16_t> * val)630 bool Parcel::ReadInt16Vector(std::vector<int16_t> *val)
631 {
632     return ReadVector(val, &Parcel::ReadInt16);
633 }
634 
ReadInt32Vector(std::vector<int32_t> * val)635 bool Parcel::ReadInt32Vector(std::vector<int32_t> *val)
636 {
637     return ReadVector(val, &Parcel::ReadInt32);
638 }
639 
ReadInt64Vector(std::vector<int64_t> * val)640 bool Parcel::ReadInt64Vector(std::vector<int64_t> *val)
641 {
642     return ReadVector(val, &Parcel::ReadInt64);
643 }
644 
ReadUInt8Vector(std::vector<uint8_t> * val)645 bool Parcel::ReadUInt8Vector(std::vector<uint8_t> *val)
646 {
647     return ReadVector(val, &Parcel::ReadUint8Unaligned);
648 }
649 
ReadUInt16Vector(std::vector<uint16_t> * val)650 bool Parcel::ReadUInt16Vector(std::vector<uint16_t> *val)
651 {
652     return ReadVector(val, &Parcel::ReadUint16Unaligned);
653 }
654 
ReadUInt32Vector(std::vector<uint32_t> * val)655 bool Parcel::ReadUInt32Vector(std::vector<uint32_t> *val)
656 {
657     return ReadVector(val, &Parcel::ReadUint32);
658 }
659 
ReadUInt64Vector(std::vector<uint64_t> * val)660 bool Parcel::ReadUInt64Vector(std::vector<uint64_t> *val)
661 {
662     return ReadVector(val, &Parcel::ReadUint64);
663 }
664 
ReadFloatVector(std::vector<float> * val)665 bool Parcel::ReadFloatVector(std::vector<float> *val)
666 {
667     return ReadVector(val, &Parcel::ReadFloat);
668 }
669 
ReadDoubleVector(std::vector<double> * val)670 bool Parcel::ReadDoubleVector(std::vector<double> *val)
671 {
672     return ReadVector(val, &Parcel::ReadDouble);
673 }
674 
ReadStringVector(std::vector<std::string> * val)675 bool Parcel::ReadStringVector(std::vector<std::string> *val)
676 {
677     return {};
678 }
679 
ReadString16Vector(std::vector<std::u16string> * val)680 bool Parcel::ReadString16Vector(std::vector<std::u16string> *val)
681 {
682     return {};
683 }
684 }  // namespace OHOS
685