Make FPDF_AVAIL type-safe across public API.
Avoid the use of void* via the usual tricks.
-- wordsmith one public comment.
Change-Id: I0adc414a6a2e310b08a004812cc9f028c968e533
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/80331
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/fpdf_dataavail.cpp b/fpdfsdk/fpdf_dataavail.cpp
index cfbd730..96e2f6c 100644
--- a/fpdfsdk/fpdf_dataavail.cpp
+++ b/fpdfsdk/fpdf_dataavail.cpp
@@ -129,7 +129,11 @@
};
FPDF_AvailContext* FPDFAvailContextFromFPDFAvail(FPDF_AVAIL avail) {
- return static_cast<FPDF_AvailContext*>(avail);
+ return reinterpret_cast<FPDF_AvailContext*>(avail);
+}
+
+FPDF_AVAIL FPDFAvailFromFPDFAvailContext(FPDF_AvailContext* pAvailContext) {
+ return reinterpret_cast<FPDF_AVAIL>(pAvailContext);
}
} // namespace
@@ -137,7 +141,9 @@
FPDF_EXPORT FPDF_AVAIL FPDF_CALLCONV FPDFAvail_Create(FX_FILEAVAIL* file_avail,
FPDF_FILEACCESS* file) {
auto pAvail = std::make_unique<FPDF_AvailContext>(file_avail, file);
- return pAvail.release(); // Caller takes ownership.
+
+ // Caller takes ownership.
+ return FPDFAvailFromFPDFAvailContext(pAvail.release());
}
FPDF_EXPORT void FPDF_CALLCONV FPDFAvail_Destroy(FPDF_AVAIL avail) {
diff --git a/public/fpdf_dataavail.h b/public/fpdf_dataavail.h
index ad70b7f..125f261 100644
--- a/public/fpdf_dataavail.h
+++ b/public/fpdf_dataavail.h
@@ -50,7 +50,6 @@
size_t offset,
size_t size);
} FX_FILEAVAIL;
-typedef void* FPDF_AVAIL;
// Create a document availability provider.
//
diff --git a/public/fpdfview.h b/public/fpdfview.h
index e996d4a..e37f9f4 100644
--- a/public/fpdfview.h
+++ b/public/fpdfview.h
@@ -50,10 +50,11 @@
FPDF_TEXTRENDERMODE_LAST = FPDF_TEXTRENDERMODE_CLIP,
} FPDF_TEXT_RENDERMODE;
-// PDF types - use incomplete types (never completed) just for API type safety.
+// PDF types - use incomplete types (never completed) to force API type safety.
typedef struct fpdf_action_t__* FPDF_ACTION;
typedef struct fpdf_annotation_t__* FPDF_ANNOTATION;
typedef struct fpdf_attachment_t__* FPDF_ATTACHMENT;
+typedef struct fpdf_avail_t__* FPDF_AVAIL;
typedef struct fpdf_bitmap_t__* FPDF_BITMAP;
typedef struct fpdf_bookmark_t__* FPDF_BOOKMARK;
typedef struct fpdf_clippath_t__* FPDF_CLIPPATH;