1/*
2 * Copyright 2009,2011, Haiku, Inc.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _PACKAGE__HPKG__V1__PACKAGE_ENTRY_H_
6#define _PACKAGE__HPKG__V1__PACKAGE_ENTRY_H_
7
8
9#include <sys/stat.h>
10
11#include <package/hpkg/v1/PackageData.h>
12
13
14namespace BPackageKit {
15
16namespace BHPKG {
17
18namespace V1 {
19
20
21class BPackageEntry {
22public:
23								BPackageEntry(BPackageEntry* parent,
24									const char* name);
25
26			const BPackageEntry*	Parent() const	{ return fParent; }
27			const char*			Name() const		{ return fName; }
28			void*				UserToken() const	{ return fUserToken; }
29
30			mode_t				Mode() const		{ return fMode; }
31
32			const timespec&		AccessTime() const
33									{ return fAccessTime; }
34			const timespec&		ModifiedTime() const
35									{ return fModifiedTime; }
36			const timespec&		CreationTime() const
37									{ return fCreationTime; }
38
39			BPackageData&		Data()	{ return fData; }
40
41			const char*			SymlinkPath() const	{ return fSymlinkPath; }
42
43			void				SetUserToken(void* token)
44									{ fUserToken = token; }
45
46			void				SetType(uint32 type);
47			void				SetPermissions(uint32 permissions);
48
49			void				SetAccessTime(uint32 seconds)
50									{ fAccessTime.tv_sec = seconds; }
51			void				SetAccessTimeNanos(uint32 nanos)
52									{ fAccessTime.tv_nsec = nanos; }
53			void				SetModifiedTime(uint32 seconds)
54									{ fModifiedTime.tv_sec = seconds; }
55			void				SetModifiedTimeNanos(uint32 nanos)
56									{ fModifiedTime.tv_nsec = nanos; }
57			void				SetCreationTime(uint32 seconds)
58									{ fCreationTime.tv_sec = seconds; }
59			void				SetCreationTimeNanos(uint32 nanos)
60									{ fCreationTime.tv_nsec = nanos; }
61
62			void				SetSymlinkPath(const char* path)
63									{ fSymlinkPath = path; }
64private:
65			BPackageEntry*		fParent;
66			const char*			fName;
67			void*				fUserToken;
68			mode_t				fMode;
69			timespec			fAccessTime;
70			timespec			fModifiedTime;
71			timespec			fCreationTime;
72			BPackageData		fData;
73			const char*			fSymlinkPath;
74};
75
76
77inline void
78BPackageEntry::SetType(uint32 type)
79{
80	fMode = (fMode & ~(uint32)S_IFMT) | (type & S_IFMT);
81}
82
83
84inline void
85BPackageEntry::SetPermissions(uint32 permissions)
86{
87	fMode = (fMode & ~(uint32)ALLPERMS) | (permissions & ALLPERMS);
88}
89
90
91}	// namespace V1
92
93}	// namespace BHPKG
94
95}	// namespace BPackageKit
96
97
98#endif	// _PACKAGE__HPKG__V1__PACKAGE_ENTRY_H_
99