mirror of
https://review.haiku-os.org/haiku
synced 2025-02-06 05:50:48 +01:00
* Use enums/constants/functions instead of preprocessor macros. * Missing include in PackageInfoAttributeValue.h. * PackageReaderImpl::Init(): Check version before header size and return B_MISMATCHED_VALUES instead of B_BAD_DATA, if the version doesn't match. This allows callers to determine the condition and try a reader for a different version. A more flexible interface for that case would be nice, but since we want to support the old package version only temporarily, the current solution should be good enough.
111 lines
2.1 KiB
C++
111 lines
2.1 KiB
C++
/*
|
|
* Copyright 2009,2011, Haiku, Inc.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef _PACKAGE__HPKG__PACKAGE_INFO_ATTRIBUTE_VALUE_H_
|
|
#define _PACKAGE__HPKG__PACKAGE_INFO_ATTRIBUTE_VALUE_H_
|
|
|
|
|
|
#include <SupportDefs.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <package/PackageArchitecture.h>
|
|
#include <package/PackageInfoAttributes.h>
|
|
#include <package/PackageResolvableOperator.h>
|
|
#include <package/PackageResolvableType.h>
|
|
|
|
|
|
namespace BPackageKit {
|
|
|
|
namespace BHPKG {
|
|
|
|
|
|
struct BPackageVersionData {
|
|
const char* major;
|
|
const char* minor;
|
|
const char* micro;
|
|
const char* preRelease;
|
|
uint32 revision;
|
|
};
|
|
|
|
|
|
struct BPackageResolvableData {
|
|
BPackageResolvableType type;
|
|
const char* name;
|
|
bool haveVersion;
|
|
bool haveCompatibleVersion;
|
|
BPackageVersionData version;
|
|
BPackageVersionData compatibleVersion;
|
|
};
|
|
|
|
|
|
struct BPackageResolvableExpressionData {
|
|
const char* name;
|
|
bool haveOpAndVersion;
|
|
BPackageResolvableOperator op;
|
|
BPackageVersionData version;
|
|
};
|
|
|
|
|
|
struct BPackageInfoAttributeValue {
|
|
union {
|
|
uint64 unsignedInt;
|
|
const char* string;
|
|
BPackageVersionData version;
|
|
BPackageResolvableData resolvable;
|
|
BPackageResolvableExpressionData resolvableExpression;
|
|
};
|
|
BPackageInfoAttributeID attributeID;
|
|
|
|
public:
|
|
BPackageInfoAttributeValue();
|
|
|
|
void SetTo(BPackageInfoAttributeID id,
|
|
uint8 value);
|
|
void SetTo(BPackageInfoAttributeID id,
|
|
const char* value);
|
|
|
|
void Clear();
|
|
};
|
|
|
|
|
|
inline
|
|
BPackageInfoAttributeValue::BPackageInfoAttributeValue()
|
|
{
|
|
Clear();
|
|
}
|
|
|
|
|
|
inline void
|
|
BPackageInfoAttributeValue::SetTo(BPackageInfoAttributeID id, uint8 value)
|
|
{
|
|
attributeID = id;
|
|
unsignedInt = value;
|
|
}
|
|
|
|
|
|
inline void
|
|
BPackageInfoAttributeValue::SetTo(BPackageInfoAttributeID id,
|
|
const char* value)
|
|
{
|
|
attributeID = id;
|
|
string = value;
|
|
}
|
|
|
|
|
|
inline void
|
|
BPackageInfoAttributeValue::Clear()
|
|
{
|
|
memset(this, 0, sizeof(BPackageInfoAttributeValue));
|
|
attributeID = B_PACKAGE_INFO_ENUM_COUNT;
|
|
}
|
|
|
|
|
|
} // namespace BHPKG
|
|
|
|
} // namespace BPackageKit
|
|
|
|
|
|
#endif // _PACKAGE__HPKG__PACKAGE_ATTRIBUTE_VALUE_H_
|