[Security] Fix PrivacyPrivilegeManager.RequestPermissions crash issue (#1651)
[platform/core/csapi/tizenfx.git] / internals / src / EflSharp / EflSharp / efl / eina_error.cs
1 #pragma warning disable 1591
2
3 using System;
4 using System.Runtime.InteropServices;
5
6 namespace Eina
7 {
8
9 public struct Error : IComparable<Error>
10 {
11     int code;
12
13     public string Message
14     {
15         get { return MsgGet(this); }
16     }
17
18     public static Error UNHANDLED_EXCEPTION;
19
20     public static Error NO_ERROR = new Error(0);
21     public static Error EPERM = new Error(1);
22     public static Error ENOENT = new Error(2);
23     public static Error ECANCELED = new Error(125);
24
25     public Error(int value)
26     {
27         code = value;
28     }
29
30     static public implicit operator Error(int val)
31     {
32         return new Error(val);
33     }
34
35     static public implicit operator int(Error error)
36     {
37         return error.code;
38     }
39
40     public int CompareTo(Error err)
41     {
42         return code.CompareTo(err.code);
43     }
44
45     public override string ToString()
46     {
47         return "Eina.Error(" + code + ")";
48     }
49
50     static Error()
51     {
52         UNHANDLED_EXCEPTION = eina_error_msg_register("Unhandled C# exception occurred.");
53     }
54
55     [DllImport(efl.Libs.Eina)] static extern Error eina_error_msg_register(string msg);
56     [DllImport(efl.Libs.Eina)] static extern Error eina_error_get();
57     [DllImport(efl.Libs.Eina)] static extern void eina_error_set(Error error);
58     [DllImport(efl.Libs.Eina)] static extern IntPtr eina_error_msg_get(Error error);
59
60     public static void Set(Error error)
61     {
62         eina_error_set(error);
63     }
64
65     public static Error Get()
66     {
67         return eina_error_get();
68     }
69
70     public static String MsgGet(Error error)
71     {
72         IntPtr cstr = eina_error_msg_get(error);
73         return Eina.StringConversion.NativeUtf8ToManagedString(cstr);
74     }
75
76     /// <summary>Raises an exception if an unhandled exception occurred before switching
77     /// back to the native code. For example, in an event handler.</summary>
78     public static void RaiseIfUnhandledException()
79     {
80         Error e = Get();
81         if (e == UNHANDLED_EXCEPTION)
82         {
83             Clear();
84             Raise(e);
85         }
86     }
87
88     public static void Raise(Error e)
89     {
90         if (e != 0)
91         {
92             throw (new Efl.EflException(MsgGet(e)));
93         }
94     }
95
96     public static void Clear()
97     {
98         Set(0);
99     }
100
101     public static Error Register(string msg)
102     {
103         return eina_error_msg_register(msg);
104     }
105 }
106
107 }