|
@@ -1,5 +1,5 @@
|
|
|
#include <string>
|
|
|
-#include <iostream>
|
|
|
+#include <sstream>
|
|
|
|
|
|
// for memcpy
|
|
|
#include <cstring>
|
|
@@ -9,17 +9,19 @@
|
|
|
|
|
|
#include "sources.h"
|
|
|
|
|
|
-bool DscExtract::TakeDsc(const void *newData, unsigned long newSize)
|
|
|
+bool DscExtract::TakeDsc(const void *newData, unsigned long long newSize)
|
|
|
{
|
|
|
- if(newSize > maxSize)
|
|
|
- return _error->Error("DSC data is too large %lu!", newSize);
|
|
|
-
|
|
|
if (newSize == 0)
|
|
|
{
|
|
|
+ // adding two newlines 'off record' for pkgTagSection.Scan() calls
|
|
|
+ Data = "\n\n";
|
|
|
Length = 0;
|
|
|
return true;
|
|
|
}
|
|
|
- memcpy(Data, newData, newSize);
|
|
|
+
|
|
|
+ Data = std::string((const char*)newData, newSize);
|
|
|
+ // adding two newlines 'off record' for pkgTagSection.Scan() calls
|
|
|
+ Data.append("\n\n");
|
|
|
Length = newSize;
|
|
|
|
|
|
return true;
|
|
@@ -27,20 +29,31 @@ bool DscExtract::TakeDsc(const void *newData, unsigned long newSize)
|
|
|
|
|
|
bool DscExtract::Read(std::string FileName)
|
|
|
{
|
|
|
+ Data.clear();
|
|
|
+ Length = 0;
|
|
|
+
|
|
|
FileFd F;
|
|
|
if (OpenMaybeClearSignedFile(FileName, F) == false)
|
|
|
return false;
|
|
|
-
|
|
|
- unsigned long long const FSize = F.FileSize();
|
|
|
- if(FSize > maxSize)
|
|
|
- return _error->Error("DSC file '%s' is too large!",FileName.c_str());
|
|
|
-
|
|
|
- if (F.Read(Data, FSize) == false)
|
|
|
- return false;
|
|
|
- Length = FSize;
|
|
|
|
|
|
IsClearSigned = (FileName != F.Name());
|
|
|
|
|
|
+ std::ostringstream data;
|
|
|
+ char buffer[1024];
|
|
|
+ do {
|
|
|
+ unsigned long long actual = 0;
|
|
|
+ if (F.Read(buffer, sizeof(buffer)-1, &actual) == false)
|
|
|
+ return _error->Errno("read", "Failed to read dsc file %s", FileName.c_str());
|
|
|
+ if (actual == 0)
|
|
|
+ break;
|
|
|
+ Length += actual;
|
|
|
+ buffer[actual] = '\0';
|
|
|
+ data << buffer;
|
|
|
+ } while(true);
|
|
|
+
|
|
|
+ // adding two newlines 'off record' for pkgTagSection.Scan() calls
|
|
|
+ data << "\n\n";
|
|
|
+ Data = data.str();
|
|
|
return true;
|
|
|
}
|
|
|
|