[haiku-commits] r40348 - in haiku/trunk: headers/private/package/hpkg src/kits/package/hpkg

  • From: zooey@xxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 1 Feb 2011 23:01:45 +0100 (CET)

Author: zooey
Date: 2011-02-01 23:01:44 +0100 (Tue, 01 Feb 2011)
New Revision: 40348
Changeset: http://dev.haiku-os.org/changeset/40348

Modified:
   haiku/trunk/headers/private/package/hpkg/PackageWriterImpl.h
   haiku/trunk/headers/private/package/hpkg/haiku_package.h
   haiku/trunk/src/kits/package/hpkg/PackageWriterImpl.cpp
Log:
* implemented writing of package attributes to hpkg file

Modified: haiku/trunk/headers/private/package/hpkg/PackageWriterImpl.h
===================================================================
--- haiku/trunk/headers/private/package/hpkg/PackageWriterImpl.h        
2011-02-01 22:01:17 UTC (rev 40347)
+++ haiku/trunk/headers/private/package/hpkg/PackageWriterImpl.h        
2011-02-01 22:01:44 UTC (rev 40348)
@@ -16,7 +16,6 @@
 
 namespace BPackageKit {
 
-
 namespace BHPKG {
 
 
@@ -81,6 +80,9 @@
                        void                            
_WriteUnsignedLEB128(uint64 value);
        inline  void                            _WriteString(const char* 
string);
 
+                       void                            _WritePackageVersion(
+                                                                       const 
BPackageVersion& version);
+
        template<typename Type>
        inline  void                            _Write(const Type& value);
 

Modified: haiku/trunk/headers/private/package/hpkg/haiku_package.h
===================================================================
--- haiku/trunk/headers/private/package/hpkg/haiku_package.h    2011-02-01 
22:01:17 UTC (rev 40347)
+++ haiku/trunk/headers/private/package/hpkg/haiku_package.h    2011-02-01 
22:01:44 UTC (rev 40348)
@@ -51,13 +51,26 @@
 
 // attribute tag arithmetics
 #define B_HPKG_ATTRIBUTE_TAG_COMPOSE(index, encoding, hasChildren)     \
-       (((uint64(index) << 3) | uint64(encoding) << 1                          
\
+       (((uint64(index) << 3) | uint64(encoding) << 1                          
        \
                | ((hasChildren) ? 1 : 0)) + 1)
 #define B_HPKG_ATTRIBUTE_TAG_INDEX(tag)                        (uint64((tag) - 
1) >> 3)
 #define B_HPKG_ATTRIBUTE_TAG_ENCODING(tag)             ((uint64((tag) - 1) >> 
1) & 0x3)
 #define B_HPKG_ATTRIBUTE_TAG_HAS_CHILDREN(tag) ((uint64((tag) - 1) & 0x1) != 0)
 
+// package attribute tag arithmetics
+#define B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(id, type, encoding, hasChildren) \
+       (((uint16(encoding) << 9) | (((hasChildren) ? 1 : 0) << 8)              
                  \
+               | (uint16(type) << 5) | (uint16(id))) + 1)
+#define B_HPKG_PACKAGE_ATTRIBUTE_TAG_ENCODING(tag)             \
+       ((uint16((tag) - 1) >> 9) & 0x3)
+#define B_HPKG_PACKAGE_ATTRIBUTE_TAG_HAS_CHILDREN(tag) \
+       (((uint16((tag) - 1) >> 8) & 0x1) != 0)
+#define B_HPKG_PACKAGE_ATTRIBUTE_TAG_TYPE(tag)                 \
+       ((uint16((tag) - 1) >> 5) & 0x7)
+#define B_HPKG_PACKAGE_ATTRIBUTE_TAG_ID(tag)                   \
+       (uint16((tag) - 1) & 0x1f)
 
+
 // standard attribute names
 #define B_HPKG_ATTRIBUTE_NAME_DIRECTORY_ENTRY          "dir:entry"
        // path/entry name (string)
@@ -115,6 +128,31 @@
 };
 
 
+// package attribute IDs
+enum {
+       B_HPKG_PACKAGE_ATTRIBUTE_NAME = 0,
+       B_HPKG_PACKAGE_ATTRIBUTE_SUMMARY,
+       B_HPKG_PACKAGE_ATTRIBUTE_DESCRIPTION,
+       B_HPKG_PACKAGE_ATTRIBUTE_VENDOR,
+       B_HPKG_PACKAGE_ATTRIBUTE_PACKAGER,
+       B_HPKG_PACKAGE_ATTRIBUTE_ARCHITECTURE,
+       B_HPKG_PACKAGE_ATTRIBUTE_VERSION_MAJOR,
+       B_HPKG_PACKAGE_ATTRIBUTE_VERSION_MINOR,
+       B_HPKG_PACKAGE_ATTRIBUTE_VERSION_MICRO,
+       B_HPKG_PACKAGE_ATTRIBUTE_VERSION_RELEASE,
+       B_HPKG_PACKAGE_ATTRIBUTE_COPYRIGHT,
+       B_HPKG_PACKAGE_ATTRIBUTE_LICENSE,
+       B_HPKG_PACKAGE_ATTRIBUTE_PROVIDES,
+       B_HPKG_PACKAGE_ATTRIBUTE_PROVIDES_TYPE,
+       B_HPKG_PACKAGE_ATTRIBUTE_REQUIRES,
+       B_HPKG_PACKAGE_ATTRIBUTE_SUPPLEMENTS,
+       B_HPKG_PACKAGE_ATTRIBUTE_CONFLICTS,
+       B_HPKG_PACKAGE_ATTRIBUTE_FRESHENS,
+       B_HPKG_PACKAGE_ATTRIBUTE_REPLACES,
+       B_HPKG_PACKAGE_ATTRIBUTE_RESOLVABLE_OPERATOR,
+};
+
+
 }      // namespace BPrivate
 
 }      // namespace BHPKG

Modified: haiku/trunk/src/kits/package/hpkg/PackageWriterImpl.cpp
===================================================================
--- haiku/trunk/src/kits/package/hpkg/PackageWriterImpl.cpp     2011-02-01 
22:01:17 UTC (rev 40347)
+++ haiku/trunk/src/kits/package/hpkg/PackageWriterImpl.cpp     2011-02-01 
22:01:44 UTC (rev 40348)
@@ -1011,8 +1011,98 @@
        FDDataWriter realWriter(fFD, startOffset, fListener);
        fDataWriter = &realWriter;
 
+       // name
+       _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+               B_HPKG_PACKAGE_ATTRIBUTE_NAME, B_HPKG_ATTRIBUTE_TYPE_STRING,
+               B_HPKG_ATTRIBUTE_ENCODING_STRING_INLINE, 0));
+       _WriteString(fPackageInfo.Name().String());
+
+       // summary
+       _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+               B_HPKG_PACKAGE_ATTRIBUTE_SUMMARY, B_HPKG_ATTRIBUTE_TYPE_STRING,
+               B_HPKG_ATTRIBUTE_ENCODING_STRING_INLINE, 0));
+       _WriteString(fPackageInfo.Summary().String());
+
+       // description
+       _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+               B_HPKG_PACKAGE_ATTRIBUTE_DESCRIPTION, 
B_HPKG_ATTRIBUTE_TYPE_STRING,
+               B_HPKG_ATTRIBUTE_ENCODING_STRING_INLINE, 0));
+       _WriteString(fPackageInfo.Description().String());
+
+       // vendor
+       _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+               B_HPKG_PACKAGE_ATTRIBUTE_VENDOR, B_HPKG_ATTRIBUTE_TYPE_STRING,
+               B_HPKG_ATTRIBUTE_ENCODING_STRING_INLINE, 0));
+       _WriteString(fPackageInfo.Vendor().String());
+
+       // packager
+       _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+               B_HPKG_PACKAGE_ATTRIBUTE_PACKAGER, B_HPKG_ATTRIBUTE_TYPE_STRING,
+               B_HPKG_ATTRIBUTE_ENCODING_STRING_INLINE, 0));
+       _WriteString(fPackageInfo.Packager().String());
+
+       // architecture
+       _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+               B_HPKG_PACKAGE_ATTRIBUTE_ARCHITECTURE, 
B_HPKG_ATTRIBUTE_TYPE_UINT,
+               B_HPKG_ATTRIBUTE_ENCODING_INT_8_BIT, 0));
+       _Write<uint8>(fPackageInfo.Architecture());
+
+       // version
+       _WritePackageVersion(fPackageInfo.Version());
+
+       // copyright list
+       const BObjectList<BString>& copyrightList = 
fPackageInfo.CopyrightList();
+       for (int i = 0; i < copyrightList.CountItems(); ++i) {
+               _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+                       B_HPKG_PACKAGE_ATTRIBUTE_COPYRIGHT, 
B_HPKG_ATTRIBUTE_TYPE_STRING,
+                       B_HPKG_ATTRIBUTE_ENCODING_STRING_INLINE, 0));
+               _WriteString(copyrightList.ItemAt(i)->String());
+       }
+
+       // license list
+       const BObjectList<BString>& licenseList = fPackageInfo.LicenseList();
+       for (int i = 0; i < licenseList.CountItems(); ++i) {
+               _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+                       B_HPKG_PACKAGE_ATTRIBUTE_LICENSE, 
B_HPKG_ATTRIBUTE_TYPE_STRING,
+                       B_HPKG_ATTRIBUTE_ENCODING_STRING_INLINE, 0));
+               _WriteString(licenseList.ItemAt(i)->String());
+       }
+
+       const BObjectList<BPackageResolvable>& providesList
+               = fPackageInfo.ProvidesList();
+       for (int i = 0; i < providesList.CountItems(); ++i) {
+               BPackageResolvable* resolvable = providesList.ItemAt(i);
+               bool hasVersion = resolvable->Version().InitCheck() == B_OK;
+               _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+                       B_HPKG_PACKAGE_ATTRIBUTE_PROVIDES_TYPE, 
B_HPKG_ATTRIBUTE_TYPE_UINT,
+                       B_HPKG_ATTRIBUTE_ENCODING_INT_8_BIT, hasVersion ? 1 : 
0));
+               _Write<uint8>(fPackageInfo.Architecture());
+               _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+                       B_HPKG_PACKAGE_ATTRIBUTE_PROVIDES, 
B_HPKG_ATTRIBUTE_TYPE_STRING,
+                       B_HPKG_ATTRIBUTE_ENCODING_STRING_INLINE, 1));
+               _WriteString(resolvable->AsString().String());
+               if (hasVersion) {
+                       _WritePackageVersion(resolvable->Version());
+                       _Write<uint8>(0);
+               }
+       }
+
+       const BObjectList<BPackageResolvableExpression>& requiresList
+               = fPackageInfo.RequiresList();
+       for (int i = 0; i < requiresList.CountItems(); ++i) {
+               BPackageResolvableExpression* resolvableExpr = 
requiresList.ItemAt(i);
+               bool hasVersion = resolvableExpr->Version().InitCheck() == B_OK;
+               _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+                       B_HPKG_PACKAGE_ATTRIBUTE_REQUIRES, 
B_HPKG_ATTRIBUTE_TYPE_STRING,
+                       B_HPKG_ATTRIBUTE_ENCODING_STRING_INLINE, hasVersion));
+               _WriteString(resolvableExpr->AsString().String());
+               if (hasVersion) {
+                       _WritePackageVersion(resolvableExpr->Version());
+                       _Write<uint8>(0);
+               }
+       }
+
        _Write<uint8>(0);
-               // TODO: Write them for real!
        fHeapEnd = realWriter.Offset();
        fDataWriter = NULL;
 
@@ -1032,6 +1122,28 @@
 
 
 void
+PackageWriterImpl::_WritePackageVersion(const BPackageVersion& version)
+{
+       _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+               B_HPKG_PACKAGE_ATTRIBUTE_VERSION_MAJOR, 
B_HPKG_ATTRIBUTE_TYPE_STRING,
+               B_HPKG_ATTRIBUTE_ENCODING_STRING_INLINE, 0));
+       _WriteString(version.Major());
+       _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+               B_HPKG_PACKAGE_ATTRIBUTE_VERSION_MINOR, 
B_HPKG_ATTRIBUTE_TYPE_STRING,
+               B_HPKG_ATTRIBUTE_ENCODING_STRING_INLINE, 0));
+       _WriteString(version.Minor());
+       _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+               B_HPKG_PACKAGE_ATTRIBUTE_VERSION_MICRO, 
B_HPKG_ATTRIBUTE_TYPE_STRING,
+               B_HPKG_ATTRIBUTE_ENCODING_STRING_INLINE, 0));
+       _WriteString(version.Micro());
+       _WriteUnsignedLEB128(B_HPKG_PACKAGE_ATTRIBUTE_TAG_COMPOSE(
+               B_HPKG_PACKAGE_ATTRIBUTE_VERSION_RELEASE, 
B_HPKG_ATTRIBUTE_TYPE_UINT,
+               B_HPKG_ATTRIBUTE_ENCODING_INT_8_BIT, 0));
+       _Write<uint8>(version.Release());
+}
+
+
+void
 PackageWriterImpl::_WriteAttributeValue(const AttributeValue& value,
        uint8 encoding)
 {


Other related posts:

  • » [haiku-commits] r40348 - in haiku/trunk: headers/private/package/hpkg src/kits/package/hpkg - zooey