mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2024-12-14 10:13:05 +02:00
4815752ccc
Maintaining the storage layer/drivers in two languages is burdensome. Since the integration tests require the Perl storage layer/drivers we'll need them even after the core code is migrated to C. Create an interface layer so the Perl code can be removed and new storage drivers/features introduced without adding Perl equivalents. The goal is to move the integration tests to C so this interface will eventually be removed. That being the case, the interface was designed for maximum compatibility to ease the transition. The result looks a bit hacky but we'll improve it as needed until it can be retired.
160 lines
4.3 KiB
Plaintext
160 lines
4.3 KiB
Plaintext
# ----------------------------------------------------------------------------------------------------------------------------------
|
|
# Storage Read Exports
|
|
# ----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
MODULE = pgBackRest::LibC PACKAGE = pgBackRest::LibC::StorageRead
|
|
|
|
####################################################################################################################################
|
|
pgBackRest::LibC::StorageRead
|
|
new(class, storage, file, ignoreMissing)
|
|
PREINIT:
|
|
MEM_CONTEXT_XS_TEMP_BEGIN()
|
|
{
|
|
INPUT:
|
|
const String *class = STR_NEW_SV($arg);
|
|
pgBackRest::LibC::Storage storage
|
|
const String *file = STR_NEW_SV($arg);
|
|
bool ignoreMissing
|
|
CODE:
|
|
CHECK(strEqZ(class, PACKAGE_NAME_LIBC "::StorageRead"));
|
|
|
|
RETVAL = storageReadMove(storageNewReadP(storage, file, .ignoreMissing = ignoreMissing), MEM_CONTEXT_XS_OLD());
|
|
OUTPUT:
|
|
RETVAL
|
|
CLEANUP:
|
|
}
|
|
MEM_CONTEXT_XS_TEMP_END();
|
|
|
|
####################################################################################################################################
|
|
void
|
|
filterAdd(self, filter, param)
|
|
PREINIT:
|
|
MEM_CONTEXT_XS_TEMP_BEGIN()
|
|
{
|
|
INPUT:
|
|
pgBackRest::LibC::StorageRead self
|
|
const String *filter = STR_NEW_SV($arg);
|
|
const String *param = STR_NEW_SV($arg);
|
|
CODE:
|
|
IoFilterGroup *filterGroup = ioReadFilterGroup(storageReadIo(self));
|
|
storageFilterXsAdd(filterGroup, filter, param);
|
|
CLEANUP:
|
|
}
|
|
MEM_CONTEXT_XS_TEMP_END();
|
|
|
|
####################################################################################################################################
|
|
bool
|
|
open(self)
|
|
PREINIT:
|
|
MEM_CONTEXT_XS_TEMP_BEGIN()
|
|
{
|
|
INPUT:
|
|
pgBackRest::LibC::StorageRead self
|
|
CODE:
|
|
RETVAL = ioReadOpen(storageReadIo(self));
|
|
OUTPUT:
|
|
RETVAL
|
|
CLEANUP:
|
|
}
|
|
MEM_CONTEXT_XS_TEMP_END();
|
|
|
|
####################################################################################################################################
|
|
SV *
|
|
read(self, bufferSize)
|
|
PREINIT:
|
|
MEM_CONTEXT_XS_TEMP_BEGIN()
|
|
{
|
|
INPUT:
|
|
pgBackRest::LibC::StorageRead self
|
|
U32 bufferSize
|
|
CODE:
|
|
RETVAL = NEWSV(0, bufferSize);
|
|
SvPOK_only(RETVAL);
|
|
|
|
Buffer *bufferRead = bufNewUseC((unsigned char *)SvPV_nolen(RETVAL), bufferSize);
|
|
ioRead(storageReadIo(self), bufferRead);
|
|
|
|
SvCUR_set(RETVAL, bufUsed(bufferRead));
|
|
OUTPUT:
|
|
RETVAL
|
|
CLEANUP:
|
|
}
|
|
MEM_CONTEXT_XS_TEMP_END();
|
|
|
|
####################################################################################################################################
|
|
bool
|
|
eof(self)
|
|
PREINIT:
|
|
MEM_CONTEXT_XS_TEMP_BEGIN()
|
|
{
|
|
INPUT:
|
|
pgBackRest::LibC::StorageRead self
|
|
CODE:
|
|
RETVAL = ioReadEof(storageReadIo(self));
|
|
OUTPUT:
|
|
RETVAL
|
|
CLEANUP:
|
|
}
|
|
MEM_CONTEXT_XS_TEMP_END();
|
|
|
|
####################################################################################################################################
|
|
void
|
|
close(self)
|
|
PREINIT:
|
|
MEM_CONTEXT_XS_TEMP_BEGIN()
|
|
{
|
|
INPUT:
|
|
pgBackRest::LibC::StorageRead self
|
|
CODE:
|
|
ioReadClose(storageReadIo(self));
|
|
CLEANUP:
|
|
}
|
|
MEM_CONTEXT_XS_TEMP_END();
|
|
|
|
####################################################################################################################################
|
|
const char *
|
|
result(self, filter)
|
|
PREINIT:
|
|
MEM_CONTEXT_XS_TEMP_BEGIN()
|
|
{
|
|
INPUT:
|
|
pgBackRest::LibC::StorageRead self
|
|
const String *filter = STR_NEW_SV($arg);
|
|
CODE:
|
|
RETVAL = strPtr(storageFilterXsResult(ioReadFilterGroup(storageReadIo(self)), filter));
|
|
OUTPUT:
|
|
RETVAL
|
|
CLEANUP:
|
|
}
|
|
MEM_CONTEXT_XS_TEMP_END();
|
|
|
|
####################################################################################################################################
|
|
const char *
|
|
resultAll(self)
|
|
PREINIT:
|
|
MEM_CONTEXT_XS_TEMP_BEGIN()
|
|
{
|
|
INPUT:
|
|
pgBackRest::LibC::StorageRead self
|
|
CODE:
|
|
RETVAL = strPtr(storageFilterXsResultAll(ioReadFilterGroup(storageReadIo(self))));
|
|
OUTPUT:
|
|
RETVAL
|
|
CLEANUP:
|
|
}
|
|
MEM_CONTEXT_XS_TEMP_END();
|
|
|
|
####################################################################################################################################
|
|
void
|
|
DESTROY(self)
|
|
PREINIT:
|
|
MEM_CONTEXT_XS_TEMP_BEGIN()
|
|
{
|
|
INPUT:
|
|
pgBackRest::LibC::StorageRead self
|
|
CODE:
|
|
storageReadFree(self);
|
|
CLEANUP:
|
|
}
|
|
MEM_CONTEXT_XS_TEMP_END();
|