• R/O
  • SSH
  • HTTPS

vmaid: Commit


Commit MetaInfo

Revision319 (tree)
Time2010-06-26 04:46:49
Authoriwm

Log Message

add mprotect to execute

Change Summary

Incremental Difference

--- vmaid/trunk/ChangeLog (revision 318)
+++ vmaid/trunk/ChangeLog (revision 319)
@@ -2,6 +2,15 @@
22
33 * version 2.2.4
44
5+2010-06-26 Kazuki Iwamoto <iwm@maid.org>
6+
7+ * configure.ac:
8+ * w32loader/w32ldr.c: add mprotect to execute
9+
10+2010-06-25 Kazuki Iwamoto <iwm@maid.org>
11+
12+ * orz/orzmdi.[ch]: delete orz_mdi_{append,prepend,insert}_page_menu
13+
514 2010-06-23 Kazuki Iwamoto <iwm@maid.org>
615
716 * orz/orzmdi.c: add gtk_event_box_set_visible_window
--- vmaid/trunk/misc/gcommon.c (revision 318)
+++ vmaid/trunk/misc/gcommon.c (revision 319)
@@ -124,7 +124,7 @@
124124 g_strcpy (gchar *dest,
125125 const gchar *src)
126126 {
127- return g_strncpy (dest, src, G_MAXSIZE);
127+ return dest && src ? strcpy (dest, src) : dest;
128128 }
129129
130130
@@ -141,7 +141,7 @@
141141 g_strcat (gchar *dest,
142142 const gchar *src)
143143 {
144- return g_strncat (dest, src, G_MAXSIZE);
144+ return dest && src ? strcat (dest, src) : dest;
145145 }
146146
147147
@@ -159,7 +159,7 @@
159159 g_strcmp (const gchar *s1,
160160 const gchar *s2)
161161 {
162- return g_strncmp (s1, s2, G_MAXSIZE);
162+ return s1 && s2 ? strcmp (s1, s2) : 0;
163163 }
164164 #endif /* not GLIB_CHECK_VERSION(2,16,0) */
165165
--- vmaid/trunk/w32loader/w32ldr.c (revision 318)
+++ vmaid/trunk/w32loader/w32ldr.c (revision 319)
@@ -36,6 +36,12 @@
3636 #include "misc/fileio.h"
3737 #include "misc/peimage.h"
3838 #include "misc/profile.h"
39+#ifdef HAVE_SYS_MMAN_H
40+# include <sys/mman.h>
41+#endif /* HAVE_SYS_MMAN_H */
42+#ifdef HAVE_UNISTD_H
43+# include <unistd.h>
44+#endif /* HAVE_UNISTD_H */
3945
4046
4147 #define USE_DEBUG 1
@@ -113,22 +119,26 @@
113119 gsize leng, leng_head, leng_code, leng_data;
114120 LPDWORD lpdwSignature, lpdwFunction, lpdwName;
115121 LPWORD lpwOrdinal;
116- PIMAGE_DOS_HEADER pidh;
117- PIMAGE_FILE_HEADER pifh;
118- PIMAGE_OPTIONAL_HEADER pioh;
119- PIMAGE_SECTION_HEADER pish;
120- PIMAGE_EXPORT_DIRECTORY pied;
122+ ImageDosHeader *idh;
123+ ImageFileHeader *ifh;
124+ ImageOptionalHeader *ioh;
125+ ImageSectionHeader *ish;
126+ ImageExportDirectory *ied;
127+#if defined (HAVE_SYS_MMAN_H) && defined (HAVE_UNISTD_H)
128+ gint pagesize;
129+ guint addr;
130+#endif /* defined (HAVE_SYS_MMAN_H) && defined (HAVE_UNISTD_H) */
121131 #ifdef USE_DEBUG
122132 gchar *r;
123133 #endif /* USE_DEBUG */
124134
125- leng_head = sizeof (IMAGE_DOS_HEADER)
135+ leng_head = sizeof (ImageDosHeader)
126136 + sizeof (DWORD)
127- + sizeof (IMAGE_FILE_HEADER)
128- + sizeof (IMAGE_OPTIONAL_HEADER)
129- + sizeof (IMAGE_SECTION_HEADER);
137+ + sizeof (ImageFileHeader)
138+ + sizeof (ImageOptionalHeader)
139+ + sizeof (ImageSectionHeader);
130140 leng_code = 0;
131- leng_data = sizeof (IMAGE_EXPORT_DIRECTORY)
141+ leng_data = sizeof (ImageExportDirectory)
132142 + g_strlen (osdll[i].name) + 1;
133143 for (j = 0; osdll[i].exports[j].func; j++)
134144 if (osdll[i].exports[j].implement >= 0)
@@ -154,15 +164,22 @@
154164 leng_data += (ordinal_max - ordinal_min + 1) * sizeof (DWORD);
155165 leng = leng_head + leng_code + leng_data;
156166 image = g_malloc0 (leng);
167+#if defined (HAVE_SYS_MMAN_H) && defined (HAVE_UNISTD_H)
168+ pagesize = sysconf (_SC_PAGE_SIZE);
169+ addr = GPOINTER_TO_UINT (image) / pagesize * pagesize;
170+ mprotect (GUINT_TO_POINTER (addr),
171+ (GPOINTER_TO_UINT (image) + leng + pagesize - 1)
172+ / pagesize * pagesize - addr, PROT_READ | PROT_WRITE | PROT_EXEC);
173+#endif /* defined (HAVE_SYS_MMAN_H) && defined (HAVE_UNISTD_H) */
157174 /* ja:ポインタ */
158- pidh = (PIMAGE_DOS_HEADER)image;
159- lpdwSignature = (LPDWORD)(pidh + 1);
160- pifh = (PIMAGE_FILE_HEADER)(lpdwSignature + 1);
161- pioh = (PIMAGE_OPTIONAL_HEADER)(pifh + 1);
162- pish = (PIMAGE_SECTION_HEADER)(pioh + 1);
163- p = (guint8 *)(pish + 1);
164- pied = (PIMAGE_EXPORT_DIRECTORY)(p + leng_code);
165- lpdwFunction = (LPDWORD)(pied + 1);
175+ idh = (ImageDosHeader *)image;
176+ lpdwSignature = (LPDWORD)(idh + 1);
177+ ifh = (ImageFileHeader *)(lpdwSignature + 1);
178+ ioh = (ImageOptionalHeader *)(ifh + 1);
179+ ish = (ImageSectionHeader *)(ioh + 1);
180+ p = (guint8 *)(ish + 1);
181+ ied = (ImageExportDirectory *)(p + leng_code);
182+ lpdwFunction = (LPDWORD)(ied + 1);
166183 lpdwName = lpdwFunction + ordinal_max - ordinal_min + 1;
167184 lpwOrdinal = (LPWORD)(lpdwName + num);
168185 q = (gchar *)(lpwOrdinal + num);
@@ -170,58 +187,60 @@
170187 r = q;
171188 #endif /* USE_DEBUG */
172189 /* ja:設定 */
173- pidh->e_magic = IMAGE_DOS_SIGNATURE;
174- pidh->e_lfanew = sizeof (IMAGE_DOS_HEADER);
175- *lpdwSignature = IMAGE_NT_SIGNATURE;
176- pifh->Machine = IMAGE_FILE_MACHINE_I386;
177- pifh->NumberOfSections = 1;
178- pifh->SizeOfOptionalHeader = sizeof (IMAGE_OPTIONAL_HEADER);
179- pifh->Characteristics = IMAGE_FILE_EXECUTABLE_IMAGE
180- | IMAGE_FILE_LINE_NUMS_STRIPPED
181- | IMAGE_FILE_LOCAL_SYMS_STRIPPED
182- | IMAGE_FILE_32BIT_MACHINE
183- | IMAGE_FILE_DLL;
184- pioh->Magic = IMAGE_NT_OPTIONAL_HDR_MAGIC;
185- pioh->SizeOfCode = leng_code;
186- pioh->SizeOfInitializedData = leng_data;
187- pioh->BaseOfCode = leng_head;
188- pioh->BaseOfData = leng_head + leng_code;
189- pioh->ImageBase = 0x10000000;
190- pioh->SectionAlignment = 1;
191- pioh->FileAlignment = 1;
192- pioh->MajorOperatingSystemVersion = 4;
193- pioh->MinorOperatingSystemVersion = 0;
194- pioh->MajorSubsystemVersion = 4;
195- pioh->MinorSubsystemVersion = 0;
196- pioh->SizeOfImage = leng;
197- pioh->SizeOfHeaders = leng_head;
198- pioh->Subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI;
199- pioh->SizeOfStackReserve = 0x100000;
200- pioh->SizeOfStackCommit = 0x1000;
201- pioh->SizeOfHeapReserve = 0x100000;
202- pioh->SizeOfHeapCommit = 0x1000;
203- pioh->NumberOfRvaAndSizes = IMAGE_NUMBEROF_DIRECTORY_ENTRIES;
204- pioh->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress
205- = leng_head + leng_code;
206- pioh->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size = leng_data;
207- pish->Misc.VirtualSize = leng_code + leng_data;
208- pish->VirtualAddress = leng_head;
209- pish->SizeOfRawData = leng_code + leng_data;
210- pish->PointerToRawData = leng_head;
211- pish->Characteristics = IMAGE_SCN_CNT_CODE
212- | IMAGE_SCN_CNT_INITIALIZED_DATA
213- | IMAGE_SCN_MEM_EXECUTE
214- | IMAGE_SCN_MEM_READ;
215- pied->Name = GPOINTER_TO_UINT (q) - GPOINTER_TO_UINT (image);
216- pied->Base = ordinal_min;
217- pied->NumberOfFunctions = ordinal_max - ordinal_min + 1;
218- pied->NumberOfNames = num;
219- pied->AddressOfFunctions = GPOINTER_TO_UINT (lpdwFunction)
220- - GPOINTER_TO_UINT (image);
221- pied->AddressOfNames = GPOINTER_TO_UINT (lpdwName)
222- - GPOINTER_TO_UINT (image);
223- pied->AddressOfNameOrdinals = GPOINTER_TO_UINT (lpwOrdinal)
224- - GPOINTER_TO_UINT (image);
190+ idh_set_magic (idh, PEIMAGE_DOS_SIGNATURE);
191+ idh_set_lfanew (idh, sizeof (ImageDosHeader));
192+ *lpdwSignature = PEIMAGE_NT_SIGNATURE;
193+ ifh_set_machine (ifh, PEIMAGE_FILE_MACHINE_I386);
194+ ifh_set_number_of_sections (ifh, 1);
195+ ifh_set_size_of_optional_header (ifh, sizeof (ImageOptionalHeader));
196+ ifh_set_characteristics (ifh, PEIMAGE_FILE_EXECUTABLE_IMAGE
197+ | PEIMAGE_FILE_LINE_NUMS_STRIPPED
198+ | PEIMAGE_FILE_LOCAL_SYMS_STRIPPED
199+ | PEIMAGE_FILE_32BIT_MACHINE
200+ | PEIMAGE_FILE_DLL);
201+ ioh_set_magic (ioh, PEIMAGE_NT_OPTIONAL_HDR_MAGIC);
202+ ioh_set_size_of_code (ioh, leng_code);
203+ ioh_set_size_of_initialized_data (ioh, leng_data);
204+ ioh_set_base_of_code (ioh, leng_head);
205+ ioh_set_base_of_data (ioh, leng_head + leng_code);
206+ ioh_set_image_base (ioh, 0x10000000);
207+ ioh_set_section_alignment (ioh, 1);
208+ ioh_set_file_alignment (ioh, 1);
209+ ioh_set_major_operating_system_version (ioh, 4);
210+ ioh_set_minor_operating_system_version (ioh, 0);
211+ ioh_set_major_subsystem_version (ioh, 4);
212+ ioh_set_minor_subsystem_version (ioh, 0);
213+ ioh_set_size_of_image (ioh, leng);
214+ ioh_set_size_of_headers (ioh, leng_head);
215+ ioh_set_subsystem (ioh, PEIMAGE_SUBSYSTEM_WINDOWS_GUI);
216+ ioh_set_size_of_stack_reserve (ioh, 0x100000);
217+ ioh_set_size_of_stack_commit (ioh, 0x1000);
218+ ioh_set_size_of_heap_reserve (ioh, 0x100000);
219+ ioh_set_size_of_heap_commit (ioh, 0x1000);
220+ ioh_set_number_of_rva_and_sizes (ioh,
221+ PEIMAGE_NUMBEROF_DIRECTORY_ENTRIES);
222+ ioh_set_data_directory_virtual_address (ioh,
223+ PEIMAGE_DIRECTORY_ENTRY_EXPORT, leng_head + leng_code);
224+ ioh_set_data_directory_size (ioh,
225+ PEIMAGE_DIRECTORY_ENTRY_EXPORT, leng_data);
226+ ish_set_virtual_size (ish, leng_code + leng_data);
227+ ish_set_virtual_address (ish, leng_head);
228+ ish_set_size_of_raw_data (ish, leng_code + leng_data);
229+ ish_set_pointer_to_raw_data (ish, leng_head);
230+ ish_set_characteristics (ish, PEIMAGE_SCN_CNT_CODE
231+ | PEIMAGE_SCN_CNT_INITIALIZED_DATA
232+ | PEIMAGE_SCN_MEM_EXECUTE
233+ | PEIMAGE_SCN_MEM_READ);
234+ ied_set_name(ied, GPOINTER_TO_UINT (q) - GPOINTER_TO_UINT (image));
235+ ied_set_base (ied, ordinal_min);
236+ ied_set_number_of_functions (ied, ordinal_max - ordinal_min + 1);
237+ ied_set_number_of_names (ied, num);
238+ ied_set_address_of_functions (ied, GPOINTER_TO_UINT (lpdwFunction)
239+ - GPOINTER_TO_UINT (image));
240+ ied_set_address_of_names (ied, GPOINTER_TO_UINT (lpdwName)
241+ - GPOINTER_TO_UINT (image));
242+ ied_set_address_of_name_ordinals (ied, GPOINTER_TO_UINT (lpwOrdinal)
243+ - GPOINTER_TO_UINT (image));
225244 g_strcpy (q, osdll[i].name);
226245 q += g_strlen (osdll[i].name) + 1;
227246 for (j = 0; osdll[i].exports[j].func; j++)
@@ -309,6 +328,30 @@
309328 const gboolean reason,
310329 gpointer user_data)
311330 {
331+#if defined (HAVE_SYS_MMAN_H) && defined (HAVE_UNISTD_H)
332+ gint i, pagesize;
333+ gssize length = 0;
334+ guint16 sections;
335+ guint addr;
336+ ImageSectionHeader *ish;
337+
338+ pagesize = sysconf (_SC_PAGE_SIZE);
339+ sections = pe_ifh_get_number_of_sections (image);
340+ ish = pe_image_section_header (image);
341+ for (i = 0; i < sections; i++)
342+ {
343+ gssize leng;
344+
345+ leng = ish_get_virtual_size (ish) + ish_get_virtual_address (ish);
346+ if (length < leng)
347+ length = leng;
348+ ish++;
349+ }
350+ addr = GPOINTER_TO_UINT (image) / pagesize * pagesize;
351+ mprotect (GUINT_TO_POINTER (addr),
352+ (GPOINTER_TO_UINT (image) + length + pagesize - 1)
353+ / pagesize * pagesize - addr, PROT_READ | PROT_WRITE | PROT_EXEC);
354+#endif /* defined (HAVE_SYS_MMAN_H) && defined (HAVE_UNISTD_H) */
312355 if (pe_ifh_get_characteristics (image) & IMAGE_FILE_DLL)
313356 {
314357 DllEntryProc DllMain;
--- vmaid/trunk/configure.ac (revision 318)
+++ vmaid/trunk/configure.ac (revision 319)
@@ -193,7 +193,7 @@
193193 dnl Checks for header files.
194194 dnl **************************************************************
195195 AC_HEADER_STDBOOL
196-AC_CHECK_HEADERS(arpa/inet.h arpa/nameser.h complex.h fcntl.h netdb.h netinet/in.h resolv.h stdint.h sys/file.h sys/select.h sys/socket.h sys/stat.h sys/time.h sys/timeb.h sys/types.h unistd.h utime.h)
196+AC_CHECK_HEADERS(arpa/inet.h arpa/nameser.h complex.h fcntl.h netdb.h netinet/in.h resolv.h stdint.h sys/file.h sys/mman.h sys/select.h sys/socket.h sys/stat.h sys/time.h sys/timeb.h sys/types.h unistd.h utime.h)
197197
198198 dnl **************************************************************
199199 dnl Checks for typedefs, structures, and compiler characteristics.
--- vmaid/trunk/orz/orzmdi.c (revision 318)
+++ vmaid/trunk/orz/orzmdi.c (revision 319)
@@ -520,28 +520,67 @@
520520 }
521521
522522
523-/* ja:ページのタブを作る
523+/* ja:ページを最後に追加する
524524 mdi,ウィジェット
525525 child,内容
526526 file,ファイル名
527527 created,TRUE:新規作成,FALSE:既存ファイル
528528 page_data,ページデータ
529- RET,ウィジェット */
530-static GtkWidget *
531-orz_mdi_create_tab_label (OrzMdi *mdi,
532- GtkWidget *child,
533- const gchar *file,
534- const gboolean created,
535- gpointer page_data)
529+ RET,ページ(0...,-1:エラー) */
530+gint
531+orz_mdi_append_page (OrzMdi *mdi,
532+ GtkWidget *child,
533+ const gchar *file,
534+ const gboolean created,
535+ gpointer page_data)
536536 {
537+ return orz_mdi_insert_page (mdi, child, -1, file, created, page_data);
538+}
539+
540+
541+/* ja:ページを最初に追加する
542+ mdi,ウィジェット
543+ child,内容
544+ file,ファイル名
545+ created,TRUE:新規作成,FALSE:既存ファイル
546+ page_data,ページデータ
547+ RET,ページ(0...,-1:エラー) */
548+gint
549+orz_mdi_prepend_page (OrzMdi *mdi,
550+ GtkWidget *child,
551+ const gchar *file,
552+ const gboolean created,
553+ gpointer page_data)
554+{
555+ return orz_mdi_insert_page (mdi, child, 0, file, created, page_data);
556+}
557+
558+
559+/* ja:ページを挿入する
560+ mdi,ウィジェット
561+ child,内容
562+ position,位置(0...)
563+ file,ファイル名
564+ created,TRUE:新規作成,FALSE:既存ファイル
565+ page_data,ページデータ
566+ RET,ページ(0...,-1:エラー) */
567+gint
568+orz_mdi_insert_page (OrzMdi *mdi,
569+ GtkWidget *child,
570+ const gint position,
571+ const gchar *file,
572+ const gboolean created,
573+ gpointer page_data)
574+{
575+ gint page_num;
537576 GdkPixbuf *pixbuf;
538- GtkWidget *button, *hbox, *event;
539577 GtkTargetEntry dnd_entries[1] = {{"ORZ_MDI_TAB",
540578 GTK_TARGET_SAME_APP, TARGET_ORZ_MDI_TAB}};
579+ GtkWidget *button, *hbox, *event;
541580 OrzMdiTab *tab;
542581
543- if (!mdi)
544- return NULL;
582+ if (!mdi || !child)
583+ return -1;
545584 tab = g_malloc0 (sizeof (OrzMdiTab));
546585 tab->page_data = page_data;
547586 tab->created = created;
@@ -599,144 +638,13 @@
599638 G_CALLBACK (orz_mdi_tab_drag_data_get), NULL);
600639 g_signal_connect (G_OBJECT (event), "drag_data_received",
601640 G_CALLBACK (orz_mdi_tab_drag_data_received), NULL);
602-
603- return event;
604-}
605-
606-
607-/* ja:ページを最後に追加する
608- mdi,ウィジェット
609- child,内容
610- file,ファイル名
611- created,TRUE:新規作成,FALSE:既存ファイル
612- page_data,ページデータ
613- RET,ページ(0...,-1:エラー) */
614-gint
615-orz_mdi_append_page (OrzMdi *mdi,
616- GtkWidget *child,
617- const gchar *file,
618- const gboolean created,
619- gpointer page_data)
620-{
621- return orz_mdi_insert_page_menu (mdi, child, NULL, -1,
622- file, created, page_data);
623-}
624-
625-
626-/* ja:ページを最後に追加する
627- mdi,ウィジェット
628- child,内容
629- menu,メニュー
630- file,ファイル名
631- created,TRUE:新規作成,FALSE:既存ファイル
632- page_data,ページデータ
633- RET,ページ(0...,-1:エラー) */
634-gint
635-orz_mdi_append_page_menu (OrzMdi *mdi,
636- GtkWidget *child,
637- GtkWidget *menu,
638- const gchar *file,
639- const gboolean created,
640- gpointer page_data)
641-{
642- return orz_mdi_insert_page_menu (mdi, child, menu, -1,
643- file, created, page_data);
644-}
645-
646-
647-/* ja:ページを最初に追加する
648- mdi,ウィジェット
649- child,内容
650- file,ファイル名
651- created,TRUE:新規作成,FALSE:既存ファイル
652- page_data,ページデータ
653- RET,ページ(0...,-1:エラー) */
654-gint
655-orz_mdi_prepend_page (OrzMdi *mdi,
656- GtkWidget *child,
657- const gchar *file,
658- const gboolean created,
659- gpointer page_data)
660-{
661- return orz_mdi_insert_page_menu (mdi, child, NULL, 0,
662- file, created, page_data);
663-}
664-
665-
666-/* ja:ページを最初に追加する
667- mdi,ウィジェット
668- child,内容
669- menu,メニュー
670- file,ファイル名
671- created,TRUE:新規作成,FALSE:既存ファイル
672- page_data,ページデータ
673- RET,ページ(0...,-1:エラー) */
674-gint
675-orz_mdi_prepend_page_menu (OrzMdi *mdi,
676- GtkWidget *child,
677- GtkWidget *menu,
678- const gchar *file,
679- const gboolean created,
680- gpointer page_data)
681-{
682- return orz_mdi_insert_page_menu (mdi, child, menu, 0,
683- file, created, page_data);
684-}
685-
686-
687-/* ja:ページを挿入する
688- mdi,ウィジェット
689- child,内容
690- position,位置(0...)
691- file,ファイル名
692- created,TRUE:新規作成,FALSE:既存ファイル
693- page_data,ページデータ
694- RET,ページ(0...,-1:エラー) */
695-gint
696-orz_mdi_insert_page (OrzMdi *mdi,
697- GtkWidget *child,
698- const gint position,
699- const gchar *file,
700- const gboolean created,
701- gpointer page_data)
702-{
703- return orz_mdi_insert_page_menu (mdi, child, NULL, position,
704- file, created, page_data);
705-}
706-
707-
708-/* ja:ページを挿入する
709- mdi,ウィジェット
710- child,内容
711- menu,メニュー
712- position,位置(0...)
713- file,ファイル名
714- created,TRUE:新規作成,FALSE:既存ファイル
715- page_data,ページデータ
716- RET,ページ(0...,-1:エラー) */
717-gint
718-orz_mdi_insert_page_menu (OrzMdi *mdi,
719- GtkWidget *child,
720- GtkWidget *menu,
721- const gint position,
722- const gchar *file,
723- const gboolean created,
724- gpointer page_data)
725-{
726- gint page_num = -1;
727- GtkWidget *tab_label;
728-
729- tab_label = orz_mdi_create_tab_label (mdi, child, file, created, page_data);
730- if (tab_label)
731- {
732- page_num = gtk_notebook_insert_page_menu (GTK_NOTEBOOK (mdi), child,
733- tab_label, menu, position);
734- g_signal_emit (mdi,
735- orz_mdi_signals[ADD_WINDOW_SIGNAL],
736- 0,
737- page_num,
738- page_data);
739- }
641+ page_num = gtk_notebook_insert_page (GTK_NOTEBOOK (mdi), child,
642+ event, position);
643+ g_signal_emit (mdi,
644+ orz_mdi_signals[ADD_WINDOW_SIGNAL],
645+ 0,
646+ page_num,
647+ page_data);
740648 return page_num;
741649 }
742650
--- vmaid/trunk/orz/orzmdi.h (revision 318)
+++ vmaid/trunk/orz/orzmdi.h (revision 319)
@@ -107,23 +107,6 @@
107107 gpointer page_data);
108108
109109
110-/* ja:ページを最後に追加する
111- mdi,ウィジェット
112- child,内容
113- menu,メニュー
114- file,ファイル名
115- created,TRUE:新規作成,FALSE:既存ファイル
116- page_data,ページデータ
117- RET,ページ(0...,-1:エラー) */
118-gint
119-orz_mdi_append_page_menu (OrzMdi *mdi,
120- GtkWidget *child,
121- GtkWidget *menu,
122- const gchar *file,
123- const gboolean created,
124- gpointer page_data);
125-
126-
127110 /* ja:ページを最初に追加する
128111 mdi,ウィジェット
129112 child,内容
@@ -139,23 +122,6 @@
139122 gpointer page_data);
140123
141124
142-/* ja:ページを最初に追加する
143- mdi,ウィジェット
144- child,内容
145- menu,メニュー
146- file,ファイル名
147- created,TRUE:新規作成,FALSE:既存ファイル
148- page_data,ページデータ
149- RET,ページ(0...,-1:エラー) */
150-gint
151-orz_mdi_prepend_page_menu (OrzMdi *mdi,
152- GtkWidget *child,
153- GtkWidget *menu,
154- const gchar *file,
155- const gboolean created,
156- gpointer page_data);
157-
158-
159125 /* ja:ページを挿入する
160126 mdi,ウィジェット
161127 child,内容
@@ -173,25 +139,6 @@
173139 gpointer page_data);
174140
175141
176-/* ja:ページを挿入する
177- mdi,ウィジェット
178- child,内容
179- menu,メニュー
180- position,位置(0...)
181- file,ファイル名
182- created,TRUE:新規作成,FALSE:既存ファイル
183- page_data,ページデータ
184- RET,ページ(0...,-1:エラー) */
185-gint
186-orz_mdi_insert_page_menu (OrzMdi *mdi,
187- GtkWidget *child,
188- GtkWidget *menu,
189- const gint position,
190- const gchar *file,
191- const gboolean created,
192- gpointer page_data);
193-
194-
195142 /* ja:ページ数を取得する
196143 mdi,ウィジェット
197144 RET,ページ数 */
Show on old repository browser