aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/images
diff options
context:
space:
mode:
Diffstat (limited to 'src/images')
-rw-r--r--src/images/SkForceLinking.cpp35
-rw-r--r--src/images/SkImageDecoder.cpp24
2 files changed, 35 insertions, 24 deletions
diff --git a/src/images/SkForceLinking.cpp b/src/images/SkForceLinking.cpp
new file mode 100644
index 0000000000..81dbf2eac8
--- /dev/null
+++ b/src/images/SkForceLinking.cpp
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "SkForceLinking.h"
+#include "SkImageDecoder.h"
+
+// This method is required to fool the linker into not discarding the pre-main
+// initialization and registration of the decoder classes. Passing true will
+// cause memory leaks.
+int SkForceLinking(bool doNotPassTrue) {
+ if (doNotPassTrue) {
+ SkASSERT(false);
+ CreateJPEGImageDecoder();
+ CreateWEBPImageDecoder();
+ CreateBMPImageDecoder();
+ CreateICOImageDecoder();
+ CreateWBMPImageDecoder();
+#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_WIN)
+ CreateDefaultDecoder();
+#endif
+ // Only link GIF and PNG on platforms that build them. See images.gyp
+#if !defined(SK_BUILD_FOR_MAC) && !defined(SK_BUILD_FOR_WIN) && !defined(SK_BUILD_FOR_NACL)
+ CreateGIFImageDecoder();
+#endif
+#if !defined(SK_BUILD_FOR_MAC) && !defined(SK_BUILD_FOR_WIN)
+ CreatePNGImageDecoder();
+#endif
+ return -1;
+ }
+ return 0;
+}
diff --git a/src/images/SkImageDecoder.cpp b/src/images/SkImageDecoder.cpp
index 52c43c83f1..5c078ce630 100644
--- a/src/images/SkImageDecoder.cpp
+++ b/src/images/SkImageDecoder.cpp
@@ -450,27 +450,3 @@ bool SkImageDecoder::DecodeStream(SkStream* stream, SkBitmap* bm,
}
return success;
}
-
-/**
- * This function leaks, but that is okay because it is not intended
- * to be called. It is only here so that the linker will include the
- * decoders.
- * Make sure to keep it in sync with images.gyp, so only the encoders
- * which are created on a platform are linked.
- */
-void force_linking();
-void force_linking() {
- SkASSERT(false);
- CreateJPEGImageDecoder();
- CreateWEBPImageDecoder();
- CreateBMPImageDecoder();
- CreateICOImageDecoder();
- CreateWBMPImageDecoder();
- // Only link GIF and PNG on platforms that build them. See images.gyp
-#if !defined(SK_BUILD_FOR_MAC) && !defined(SK_BUILD_FOR_WIN) && !defined(SK_BUILD_FOR_NACL)
- CreateGIFImageDecoder();
-#endif
-#if !defined(SK_BUILD_FOR_MAC) && !defined(SK_BUILD_FOR_WIN)
- CreatePNGImageDecoder();
-#endif
-}