@@ -23,6 +23,25 @@ Licensed to the Apache Software Foundation (ASF) under one
2323#import " CDVAssetLibraryFilesystem.h"
2424#import < objc/message.h>
2525
26+ static NSString * toBase64 (NSData * data) {
27+ SEL s1 = NSSelectorFromString (@" cdv_base64EncodedString" );
28+ SEL s2 = NSSelectorFromString (@" base64EncodedString" );
29+ SEL s3 = NSSelectorFromString (@" base64EncodedStringWithOptions:" );
30+
31+ if ([data respondsToSelector: s1]) {
32+ NSString * (*func)(id , SEL ) = (void *)[data methodForSelector: s1];
33+ return func (data, s1);
34+ } else if ([data respondsToSelector: s2]) {
35+ NSString * (*func)(id , SEL ) = (void *)[data methodForSelector: s2];
36+ return func (data, s2);
37+ } else if ([data respondsToSelector: s3]) {
38+ NSString * (*func)(id , SEL , NSUInteger ) = (void *)[data methodForSelector: s3];
39+ return func (data, s3, 0 );
40+ } else {
41+ return nil ;
42+ }
43+ }
44+
2645CDVFile *filePlugin = nil ;
2746
2847extern NSString * const NSURLIsExcludedFromBackupKey __attribute__ ((weak_import));
@@ -878,12 +897,7 @@ - (void)readAsDataURL:(CDVInvokedUrlCommand*)command
878897 [fs readFileAtURL: localURI start: start end: end callback: ^(NSData * data, NSString * mimeType, CDVFileError errorCode) {
879898 CDVPluginResult* result = nil ;
880899 if (data != nil ) {
881- SEL selector = NSSelectorFromString (@" cdv_base64EncodedString" );
882- if (![data respondsToSelector: selector]) {
883- selector = NSSelectorFromString (@" base64EncodedString" );
884- }
885- id (*func)(id , SEL ) = (void *)[data methodForSelector: selector];
886- NSString * b64Str = func (data, selector);
900+ NSString * b64Str = toBase64 (data);
887901 NSString * output = [NSString stringWithFormat: @" data:%@ ;base64,%@ " , mimeType, b64Str];
888902 result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsString: output];
889903 } else {
0 commit comments