]>
Commit | Line | Data |
---|---|---|
93b1d199 MT |
1 | From 6e12cb73e23e8e9488c6db1c4710bb4b3d2b48c3 Mon Sep 17 00:00:00 2001 |
2 | From: Adam Jiang <jiang.adam@gmail.com> | |
3 | Date: Fri, 1 Aug 2014 19:58:40 +0900 | |
4 | Subject: [PATCH 1/2] Fix errors in type conversion | |
5 | ||
6 | Basically, converting to 'void*' is not a good idea. However, if that | |
7 | conversion is unavoidable, it should be done in a proper way. 'const_cast' | |
8 | itself could not convert type 'T*' to 'void *', this patch adds | |
9 | 'reintepret_cast' to do it correctly. | |
10 | ||
11 | At the same time, function that returns on 'const' member like 'void*' should | |
12 | not be declared as 'const'. | |
13 | --- | |
14 | c++/cursesf.h | 12 +++++++----- | |
15 | c++/cursesm.h | 10 +++++----- | |
16 | c++/cursesp.h | 9 +++++---- | |
17 | 3 files changed, 17 insertions(+), 14 deletions(-) | |
18 | ||
19 | diff --git a/c++/cursesf.h b/c++/cursesf.h | |
20 | index 70a30c3..23b3022 100644 | |
21 | --- a/c++/cursesf.h | |
22 | +++ b/c++/cursesf.h | |
23 | @@ -673,7 +673,8 @@ protected: | |
24 | const T* p_UserData = STATIC_CAST(T*)(0)) | |
25 | : NCursesForm(nlines,ncols,begin_y,begin_x) { | |
26 | if (form) | |
27 | - set_user (const_cast<void *>(p_UserData)); | |
28 | + set_user (const_cast<void *>(reinterpret_cast<const void*> | |
29 | + (p_UserData))); | |
30 | } | |
31 | ||
32 | public: | |
33 | @@ -683,7 +684,7 @@ public: | |
34 | bool autoDelete_Fields=FALSE) | |
35 | : NCursesForm (Fields, with_frame, autoDelete_Fields) { | |
36 | if (form) | |
37 | - set_user (const_cast<void *>(p_UserData)); | |
38 | + set_user (const_cast<void *>(reinterpret_cast<const void*>(p_UserData))); | |
39 | }; | |
40 | ||
41 | NCursesUserForm (NCursesFormField Fields[], | |
42 | @@ -697,19 +698,20 @@ public: | |
43 | : NCursesForm (Fields, nlines, ncols, begin_y, begin_x, | |
44 | with_frame, autoDelete_Fields) { | |
45 | if (form) | |
46 | - set_user (const_cast<void *>(p_UserData)); | |
47 | + set_user (const_cast<void *>(reinterpret_cast<const void*> | |
48 | + (p_UserData))); | |
49 | }; | |
50 | ||
51 | virtual ~NCursesUserForm() { | |
52 | }; | |
53 | ||
54 | - inline T* UserData (void) const { | |
55 | + inline T* UserData (void) { | |
56 | return reinterpret_cast<T*>(get_user ()); | |
57 | }; | |
58 | ||
59 | inline virtual void setUserData (const T* p_UserData) { | |
60 | if (form) | |
61 | - set_user (const_cast<void *>(p_UserData)); | |
62 | + set_user (const_cast<void *>(reinterpret_cast<const void*>(p_UserData))); | |
63 | } | |
64 | ||
65 | }; | |
66 | diff --git a/c++/cursesm.h b/c++/cursesm.h | |
67 | index d9c2273..545ed49 100644 | |
68 | --- a/c++/cursesm.h | |
69 | +++ b/c++/cursesm.h | |
70 | @@ -631,7 +631,7 @@ protected: | |
71 | const T* p_UserData = STATIC_CAST(T*)(0)) | |
72 | : NCursesMenu(nlines,ncols,begin_y,begin_x) { | |
73 | if (menu) | |
74 | - set_user (const_cast<void *>(p_UserData)); | |
75 | + set_user (const_cast<void *>(reinterpret_cast<const void*>(p_UserData))); | |
76 | } | |
77 | ||
78 | public: | |
79 | @@ -641,7 +641,7 @@ public: | |
80 | bool autoDelete_Items=FALSE) | |
81 | : NCursesMenu (Items, with_frame, autoDelete_Items) { | |
82 | if (menu) | |
83 | - set_user (const_cast<void *>(p_UserData)); | |
84 | + set_user (const_cast<void *>(reinterpret_cast<const void*>(p_UserData))); | |
85 | }; | |
86 | ||
87 | NCursesUserMenu (NCursesMenuItem Items[], | |
88 | @@ -653,19 +653,19 @@ public: | |
89 | bool with_frame=FALSE) | |
90 | : NCursesMenu (Items, nlines, ncols, begin_y, begin_x, with_frame) { | |
91 | if (menu) | |
92 | - set_user (const_cast<void *>(p_UserData)); | |
93 | + set_user (const_cast<void *>(reinterpret_cast<const void*>(p_UserData))); | |
94 | }; | |
95 | ||
96 | virtual ~NCursesUserMenu() { | |
97 | }; | |
98 | ||
99 | - inline T* UserData (void) const { | |
100 | + inline T* UserData (void) { | |
101 | return reinterpret_cast<T*>(get_user ()); | |
102 | }; | |
103 | ||
104 | inline virtual void setUserData (const T* p_UserData) { | |
105 | if (menu) | |
106 | - set_user (const_cast<void *>(p_UserData)); | |
107 | + set_user (const_cast<void *>(reinterpret_cast<const void*>(p_UserData))); | |
108 | } | |
109 | }; | |
110 | ||
111 | diff --git a/c++/cursesp.h b/c++/cursesp.h | |
112 | index 9b63d6d..661e4a9 100644 | |
113 | --- a/c++/cursesp.h | |
114 | +++ b/c++/cursesp.h | |
115 | @@ -236,7 +236,8 @@ public: | |
116 | : NCursesPanel (nlines, ncols, begin_y, begin_x) | |
117 | { | |
118 | if (p) | |
119 | - set_user (const_cast<void *>(p_UserData)); | |
120 | + set_user (const_cast<void *>(reinterpret_cast<const void*> | |
121 | + (p_UserData))); | |
122 | }; | |
123 | // This creates an user panel of the requested size with associated | |
124 | // user data pointed to by p_UserData. | |
125 | @@ -244,14 +245,14 @@ public: | |
126 | NCursesUserPanel(const T* p_UserData = STATIC_CAST(T*)(0)) : NCursesPanel() | |
127 | { | |
128 | if (p) | |
129 | - set_user(const_cast<void *>(p_UserData)); | |
130 | + set_user(const_cast<void *>(reinterpret_cast<const void*>(p_UserData))); | |
131 | }; | |
132 | // This creates an user panel associated with the ::stdscr and user data | |
133 | // pointed to by p_UserData. | |
134 | ||
135 | virtual ~NCursesUserPanel() {}; | |
136 | ||
137 | - T* UserData (void) const | |
138 | + T* UserData (void) | |
139 | { | |
140 | return reinterpret_cast<T*>(get_user ()); | |
141 | }; | |
142 | @@ -260,7 +261,7 @@ public: | |
143 | virtual void setUserData (const T* p_UserData) | |
144 | { | |
145 | if (p) | |
146 | - set_user (const_cast<void *>(p_UserData)); | |
147 | + set_user (const_cast<void *>(reinterpret_cast<const void*>(p_UserData))); | |
148 | } | |
149 | // Associate the user panel with the user data pointed to by p_UserData. | |
150 | }; | |
151 | -- | |
152 | 1.8.5.2 (Apple Git-48) | |
153 |