Merge commits Tizen 2.2 to Tizen 2.2.1
[platform/framework/native/vision.git] / src / FUixVisionQrCodeGenerator.cpp
index 0c78c07..54d55b5 100644 (file)
@@ -30,7 +30,11 @@ QrCodeGenerator::QrCodeGenerator(void)
 
 QrCodeGenerator::~QrCodeGenerator(void)
 {
-    delete __pQrCodeGeneratorImpl;
+    if (__pQrCodeGeneratorImpl != null)
+    {
+        delete __pQrCodeGeneratorImpl;
+        __pQrCodeGeneratorImpl = null;
+    }
 }
 
 result
@@ -39,8 +43,10 @@ QrCodeGenerator::Construct(void)
     SysAssertf(__pQrCodeGeneratorImpl == null, "Already constructed! ",
             "Calling Construct() twice or more on a same instance is not allowed for this class.");
 
-    __pQrCodeGeneratorImpl = new (std::nothrow) _QrCodeGeneratorImpl;
-    SysTryReturnResult(NID_UIX, __pQrCodeGeneratorImpl != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]");
+    std::unique_ptr<_QrCodeGeneratorImpl> pQrCodeGeneratorImpl(new (std::nothrow) _QrCodeGeneratorImpl());
+    SysSecureTryReturn(NID_UIX, pQrCodeGeneratorImpl != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
+    __pQrCodeGeneratorImpl = pQrCodeGeneratorImpl.release();
+
     return E_SUCCESS;
 }
 
@@ -49,22 +55,25 @@ QrCodeGenerator::EncodeToBufferN(const Tizen::Base::String& message, QrCodeMode
 {
     SysAssertf(__pQrCodeGeneratorImpl != null, "Not yet constructed! Consruct() should be called before use.");
 
-    SysTryReturnResult(NID_UIX, !message.IsEmpty(), null,
+    SysSecureTryReturnResult(NID_UIX, !message.IsEmpty(), null,
             "message must not be empty. [E_INVALID_ARG]");
 
     Tizen::Text::Utf8Encoding utf8;
-    __pQrCodeGeneratorImpl->Encode((char*) utf8.GetBytesN(message)->GetPointer(), mode, error_level, compatibility);
-
+    std::unique_ptr<Tizen::Base::ByteBuffer> pMessageBuffer(utf8.GetBytesN(message));
+    __pQrCodeGeneratorImpl->Encode((char*) pMessageBuffer->GetPointer(), mode, error_level, compatibility);
     __pQrCodeGeneratorImpl->GetSize(width, height);
 
-    Tizen::Base::ByteBuffer* buffer = new Tizen::Base::ByteBuffer;
-    buffer->Construct(width * height);
+    std::unique_ptr<Tizen::Base::ByteBuffer> pBuffer(new (std::nothrow) Tizen::Base::ByteBuffer());
+    SysSecureTryReturn(NID_UIX, pBuffer != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
+
+    pBuffer->Construct(width * height);
 
-    if (__pQrCodeGeneratorImpl->SaveToBuffer((unsigned char*) buffer->GetPointer()))
+    if (__pQrCodeGeneratorImpl->SaveToBuffer((unsigned char*) pBuffer->GetPointer()))
+    {
+        return pBuffer.release();
+    }
+    else
     {
-        return buffer;
-    } else {
-        delete buffer;
         return null;
     }
 
@@ -73,31 +82,55 @@ QrCodeGenerator::EncodeToBufferN(const Tizen::Base::String& message, QrCodeMode
 result
 QrCodeGenerator::EncodeToFile(const Tizen::Base::String& message, QrCodeMode mode, QrCodeErrorCorrectionLevel errorCorrectionLevel, bool compatibility, const Tizen::Base::String& imageFilePath, Tizen::Media::ImageFormat imageFormat, int& width, int& height)
 {
+    result r =   E_SUCCESS;
     SysAssertf(__pQrCodeGeneratorImpl != null, "Not yet constructed! Consruct() should be called before use.");
 
-     SysTryReturnResult(NID_UIX, !message.IsEmpty(), E_INVALID_ARG,
-             "message must not be empty. [E_INVALID_ARG]");
+    SysSecureTryReturnResult(NID_UIX, !message.IsEmpty(), E_INVALID_ARG,
+            "message must not be empty. [E_INVALID_ARG]");
 
-     SysTryReturnResult(NID_UIX, !imageFilePath.IsEmpty(), E_INVALID_ARG,
-             "image path must not be empty. [E_INVALID_ARG]");
+    SysSecureTryReturnResult(NID_UIX, !imageFilePath.IsEmpty(), E_INVALID_ARG,
+            "image path must not be empty. [E_INVALID_ARG]");
 
-     Tizen::Text::Utf8Encoding utf8;
-     if (!__pQrCodeGeneratorImpl->Encode((char*) utf8.GetBytesN(message)->GetPointer(), mode, errorCorrectionLevel, compatibility))
-     {
-         return E_FAILURE;
-     }
+    Tizen::Text::Utf8Encoding utf8;
+    std::unique_ptr<Tizen::Base::ByteBuffer> pBuffer(utf8.GetBytesN(message));
+    if (!__pQrCodeGeneratorImpl->Encode((char*) pBuffer->GetPointer(), mode, errorCorrectionLevel, compatibility))
+    {
+       return E_FAILURE;
+    }
+
+    if(!__pQrCodeGeneratorImpl->SaveToFile(imageFilePath, imageFormat,width, height))
+    {
+       r = GetLastResult();
+       if( r == E_ILLEGAL_ACCESS || r == E_OUT_OF_RANGE)
+       {
+               r = E_FILE_NOT_FOUND;
+       }
+       else if (r == E_UNSUPPORTED_FORMAT)
+       {
+               r = E_INVALID_ARG;
+       }
+       else
+       {
+               r = E_FAILURE;
+       }
 
-     return __pQrCodeGeneratorImpl->SaveToFile(imageFilePath, imageFormat) ? E_SUCCESS : E_FAILURE;
+    }
+
+    return r;
 }
 
 Tizen::Base::Collection::IListT<Tizen::Media::ImageFormat>*
 QrCodeGenerator::GetSupportedImageFileFormatsListN(void)
 {
-    Tizen::Base::Collection::ArrayListT<Tizen::Media::ImageFormat>* formatList = new Tizen::Base::Collection::ArrayListT<Tizen::Media::ImageFormat>;
-    formatList->Add(Tizen::Media::IMG_FORMAT_BMP);
-    formatList->Add(Tizen::Media::IMG_FORMAT_JPG);
-    formatList->Add(Tizen::Media::IMG_FORMAT_PNG);
-    return formatList;
+    std::unique_ptr<Tizen::Base::Collection::ArrayListT<Tizen::Media::ImageFormat> > pFormatList(
+            new (std::nothrow) Tizen::Base::Collection::ArrayListT<Tizen::Media::ImageFormat>);
+    SysSecureTryReturn(NID_UIX, pFormatList != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
+
+
+    pFormatList->Add(Tizen::Media::IMG_FORMAT_BMP);
+    pFormatList->Add(Tizen::Media::IMG_FORMAT_JPG);
+    pFormatList->Add(Tizen::Media::IMG_FORMAT_PNG);
+    return pFormatList.release();
 }
 
 } } } //Tizen::Uix::Vision