• R/O
  • SSH
  • HTTPS

mmaid: Commit


Commit MetaInfo

Revision143 (tree)
Time2013-06-03 00:23:40
Authoriwm

Log Message

add report_rangecheckfailure.c

Change Summary

Incremental Difference

--- mmaid/trunk/ChangeLog (revision 142)
+++ mmaid/trunk/ChangeLog (revision 143)
@@ -1,3 +1,16 @@
1+2013-06-29 Kazuki Iwamoto <iwm@maid.org>
2+
3+ * version 0.4.3
4+
5+2013-06-02 Kazuki Iwamoto <iwm@maid.org>
6+
7+ * Makefile.msc.in
8+ * configure.ac
9+ * po/ja.po
10+ * iwmcrt/Makefile.am
11+ * iwmcrt/iwmcrt-makedef.c
12+ * iwmcrt/report_rangecheckfailure.c: add report_rangecheckfailure.c
13+
114 2013-05-29 Kazuki Iwamoto <iwm@maid.org>
215
316 * version 0.4.2
--- mmaid/trunk/Makefile.msc.in (revision 142)
+++ mmaid/trunk/Makefile.msc.in (revision 143)
@@ -10,9 +10,9 @@
1010 MT=mt
1111 !endif
1212
13-CLFLAGS=/c /D_MBCS /DNDEBUG /DWIN32 /D_WINDOWS /D_WIN32_WINNT=0x0500 /DWINVER=0x0500 /D_CRT_SECURE_NO_DEPRECATE /Fo$@ /MD /nologo /O2 /wd4819 /Zm400
14-LNFLAGS=/INCREMENTAL:NO /MACHINE:IX86 /NOLOGO /OUT:$@ /RELEASE
15-RCFLAGS=/c1252 /d_MBCS /dNDEBUG /dWIN32 /d_WINDOWS /d_WIN32_WINNT=0x0500 /dWINVER=0x0500 /fo$@ /l0
13+CLFLAGS=/c /D_MBCS /DNDEBUG /DWIN32 /D_WINDOWS /D_WIN32_WINNT=0x0501 /DWINVER=0x0501 /D_CRT_SECURE_NO_DEPRECATE /D_USING_V110_SDK71_ /arch:SSE /Fo$@ /MD /nologo /O2 /wd4819 /Zm400
14+LNFLAGS=/INCREMENTAL:NO /MACHINE:IX86 /NOLOGO /OUT:$@ /RELEASE /IGNORE:4210
15+RCFLAGS=/c1252 /d_MBCS /dNDEBUG /dWIN32 /d_WINDOWS /d_WIN32_WINNT=0x0501 /dWINVER=0x0501 /D_USING_V110_SDK71_ /fo$@ /l0
1616 ASFLAGS=/c /Fo$@ /nologo /safeseh
1717 LBFLAGS=/MACHINE:IX86 /NODEFAULTLIB:msvcrt.lib /NOLOGO /OUT:$@
1818 ICFLAGS=/DEFAULTLIB:iwmcrt\iwmcrt.lib /NODEFAULTLIB:msvcrt.lib
@@ -80,7 +80,7 @@
8080 src\version.obj
8181
8282 mmaid.exe: iwmcrt\iwmcrt.lib $(mmaid_OBJECTS)
83- $(LINK) $(LNFLAGS) $(ICFLAGS) /SUBSYSTEM:WINDOWS cairo.lib gdk_pixbuf-2.0.lib gdk-win32-3.0.lib gio-2.0.lib glib-2.0.lib gobject-2.0.lib gtk-win32-3.0.lib intl.lib pango-1.0.lib gdi32.lib ole32.lib shell32.lib shlwapi.lib user32.lib $(mmaid_OBJECTS)
83+ $(LINK) $(LNFLAGS) $(ICFLAGS) /SUBSYSTEM:WINDOWS,5.01 cairo.lib gdk_pixbuf-2.0.lib gdk-win32-3.0.lib gio-2.0.lib glib-2.0.lib gobject-2.0.lib gtk-win32-3.0.lib intl.lib pango-1.0.lib gdi32.lib ole32.lib shell32.lib shlwapi.lib user32.lib $(mmaid_OBJECTS)
8484 if exist $@.manifest $(MT) -manifest $@.manifest -outputresource:$@;#1
8585
8686 misc\argument.obj: $(TOP)\$*.c $(TOP)\$*.h $(TOP)\misc\gcommon.h $(TOP)\misc\gkeysyms.h $(TOP)\misc\misc.h $(TOP)\misc\profile.h
@@ -221,6 +221,7 @@
221221 iwmcrt\iwmcrt.obj \
222222 iwmcrt\maincrtstartup.obj \
223223 iwmcrt\onexit.obj \
224+ iwmcrt\report_rangecheckfailure.obj \
224225 iwmcrt\security.obj \
225226 iwmcrt\set_invalid_parameter_handler.obj \
226227 iwmcrt\stat32.obj \
@@ -311,6 +312,9 @@
311312 iwmcrt\onexit.obj: $(TOP)\$*.c $(TOP)\iwmcrt\iwmcrt.h
312313 $(CC) $(CLFLAGS) $(TOP)\$*.c
313314
315+iwmcrt\report_rangecheckfailure.obj: $(TOP)\$*.c
316+ $(CC) $(CLFLAGS) $**
317+
314318 iwmcrt\security.obj: $(TOP)\$*.c
315319 $(CC) $(CLFLAGS) $**
316320
@@ -351,17 +355,17 @@
351355 iwmcrt\iwmcrt-tlsarray.exe > $@
352356
353357 iwmcrt\iwmcrt-makedef.exe: $*.res $*.obj
354- $(LINK) $(LNFLAGS) $**
358+ $(LINK) $(LNFLAGS) /SUBSYSTEM:CONSOLE,5.01 $**
355359 if exist $@.manifest $(MT) -manifest $@.manifest -outputresource:$@;#1
356360
357361 iwmcrt\iwmcrt-makedef.res: $(TOP)\$*.rc $(TOP)\iwmcrt\iwmcrt.ico
358- $(RC) $(RCFLAGS) /DMAJOR=0 /DMINOR=0 /DMICRO=0 /DVERSION=\"0.0.0\" $(TOP)\$*.rc
362+ $(RC) $(RCFLAGS) /DMAJOR=0 /DMINOR=0 /DMICRO=1 /DVERSION=\"0.0.1\" $(TOP)\$*.rc
359363
360364 iwmcrt\iwmcrt-makedef.obj: $(TOP)\$*.c
361365 $(CC) $(CLFLAGS) $**
362366
363367 iwmcrt\iwmcrt-tlsarray.exe: $*.res $*.obj
364- $(LINK) $(LNFLAGS) $**
368+ $(LINK) $(LNFLAGS) /SUBSYSTEM:CONSOLE,5.01 $**
365369 if exist $@.manifest $(MT) -manifest $@.manifest -outputresource:$@;#1
366370
367371 iwmcrt\iwmcrt-tlsarray.res: $(TOP)\$*.rc $(TOP)\iwmcrt\iwmcrt.ico
--- mmaid/trunk/configure.ac (revision 142)
+++ mmaid/trunk/configure.ac (revision 143)
@@ -5,7 +5,7 @@
55 dnl version number
66 MAJOR_VERSION=0
77 MINOR_VERSION=4
8-MICRO_VERSION=2
8+MICRO_VERSION=3
99 EXTRA_VERSION=
1010 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
1111
--- mmaid/trunk/iwmcrt/iwmcrt-makedef.c (revision 142)
+++ mmaid/trunk/iwmcrt/iwmcrt-makedef.c (revision 143)
@@ -1,5 +1,5 @@
11 /*
2-copyright (c) 2012 Kazuki Iwamoto http://www.maid.org/ iwm@maid.org
2+copyright (c) 2012-2013 Kazuki Iwamoto http://www.maid.org/ iwm@maid.org
33
44 Permission is hereby granted, free of charge, to any person obtaining
55 a copy of this software and associated documentation files (the
@@ -24,182 +24,190 @@
2424 #include <tchar.h>
2525
2626
27-int
28-main (int argc,
29- char *argv[])
27+static LPSTR *
28+LoadMsvcrt (HANDLE hHeap,
29+ LPCTSTR lpszFile)
3030 {
31- DWORD dwSize;
32- HANDLE hHeap;
31+ HANDLE hFile;
3332 LPSTR *lpszName = NULL;
34- LPTSTR lpszEnvironment, lpszPath;
3533
36- hHeap = GetProcessHeap ();
37- dwSize = GetEnvironmentVariable (_T("Path"), NULL, 0);
38- if (dwSize > 0)
34+ hFile = CreateFile (lpszFile, GENERIC_READ, FILE_SHARE_READ,
35+ NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
36+ if (hFile != INVALID_HANDLE_VALUE)
3937 {
40- lpszEnvironment = HeapAlloc (hHeap, 0, (dwSize + 1) * sizeof (TCHAR));
41- if (GetEnvironmentVariable (_T("Path"), lpszEnvironment, dwSize)
42- == dwSize - 1)
43- {
44- lpszEnvironment[dwSize + 1] = '\0';
45- lpszPath = lpszEnvironment;
46- while (*lpszPath != '\0' && !lpszName)
47- {
48- DWORD dwSignature, dwRead;
49- HANDLE hFile;
50- LPTSTR lpszSeparator, lpszFile;
51- IMAGE_DOS_HEADER idh;
52- IMAGE_FILE_HEADER ifh;
53- IMAGE_OPTIONAL_HEADER ioh;
38+ DWORD dwSignature, dwRead;
39+ IMAGE_DOS_HEADER idh;
40+ IMAGE_FILE_HEADER ifh;
41+ IMAGE_OPTIONAL_HEADER ioh;
5442
55- for (lpszSeparator = lpszPath;
56- *lpszSeparator != '\0' && *lpszSeparator != ';';
57- lpszSeparator++);
58- *lpszSeparator = '\0';
59- dwSize = lstrlen (lpszPath);
60- lpszFile = HeapAlloc (hHeap, 0,
61- (dwSize + lstrlen (_T("msvcrt.dll")) + 2) * sizeof (TCHAR));
62- lstrcpy (lpszFile, lpszPath);
63- if (lpszFile[dwSize - 1] != '\\')
64- lstrcat (lpszFile, _T("\\"));
65- lstrcat (lpszFile, _T("msvcrt.dll"));
66- hFile = CreateFile (lpszFile, GENERIC_READ, FILE_SHARE_READ,
67- NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
68- HeapFree (hHeap, 0, lpszFile);
69- if (hFile != INVALID_HANDLE_VALUE)
70- {
71- if (ReadFile (hFile, &idh,
72- sizeof (IMAGE_DOS_HEADER), &dwRead, NULL)
73- && dwRead == sizeof (IMAGE_DOS_HEADER)
74- && idh.e_magic == IMAGE_DOS_SIGNATURE
75- && SetFilePointer (hFile, idh.e_lfanew, NULL, FILE_BEGIN)
43+ if (ReadFile (hFile, &idh, sizeof (IMAGE_DOS_HEADER), &dwRead, NULL)
44+ && dwRead == sizeof (IMAGE_DOS_HEADER)
45+ && idh.e_magic == IMAGE_DOS_SIGNATURE
46+ && SetFilePointer (hFile, idh.e_lfanew, NULL, FILE_BEGIN)
7647 != INVALID_SET_FILE_POINTER
77- && ReadFile (hFile, &dwSignature,
78- sizeof (DWORD), &dwRead, NULL)
79- && dwRead == sizeof (DWORD)
80- && ReadFile (hFile, &ifh,
81- sizeof (IMAGE_FILE_HEADER), &dwRead, NULL)
82- && dwRead == sizeof (IMAGE_FILE_HEADER)
83- && ifh.NumberOfSections > 0
84- && ReadFile (hFile, &ioh,
48+ && ReadFile (hFile, &dwSignature, sizeof (DWORD), &dwRead, NULL)
49+ && dwRead == sizeof (DWORD)
50+ && ReadFile (hFile, &ifh, sizeof (IMAGE_FILE_HEADER), &dwRead, NULL)
51+ && dwRead == sizeof (IMAGE_FILE_HEADER)
52+ && ifh.NumberOfSections > 0
53+ && ReadFile (hFile, &ioh,
8554 sizeof (IMAGE_OPTIONAL_HEADER), &dwRead, NULL)
86- && dwRead == sizeof (IMAGE_OPTIONAL_HEADER)
87- && ioh.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]
88- .VirtualAddress > 0)
89- {
90- PIMAGE_SECTION_HEADER pish;
55+ && dwRead == sizeof (IMAGE_OPTIONAL_HEADER)
56+ && ioh.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress > 0)
57+ {
58+ PIMAGE_SECTION_HEADER pish;
9159
92- pish = HeapAlloc (hHeap, 0,
60+ pish = HeapAlloc (hHeap, 0,
9361 ifh.NumberOfSections * sizeof (IMAGE_SECTION_HEADER));
94- if (ReadFile (hFile, pish,
62+ if (ReadFile (hFile, pish,
9563 ifh.NumberOfSections * sizeof (IMAGE_SECTION_HEADER),
9664 &dwRead, NULL)
97- && dwRead == ifh.NumberOfSections
98- * sizeof (IMAGE_SECTION_HEADER))
99- {
100- int i;
101- IMAGE_EXPORT_DIRECTORY ied;
65+ && dwRead == ifh.NumberOfSections * sizeof (IMAGE_SECTION_HEADER))
66+ {
67+ int i;
68+ IMAGE_EXPORT_DIRECTORY ied;
10269
103- for (i = 0; i < ifh.NumberOfSections; i++)
104- if (pish[i].VirtualAddress
70+ for (i = 0; i < ifh.NumberOfSections; i++)
71+ if (pish[i].VirtualAddress
10572 <= ioh.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]
10673 .VirtualAddress
107- && ioh.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]
74+ && ioh.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]
10875 .VirtualAddress
10976 < pish[i].VirtualAddress + pish[i].SizeOfRawData
110- && SetFilePointer (hFile,
77+ && SetFilePointer (hFile,
11178 ioh.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]
11279 .VirtualAddress
11380 - pish[i].VirtualAddress
11481 + pish[i].PointerToRawData,
11582 NULL, FILE_BEGIN) != INVALID_SET_FILE_POINTER
116- && ReadFile (hFile, &ied,
83+ && ReadFile (hFile, &ied,
11784 sizeof (IMAGE_EXPORT_DIRECTORY), &dwRead, NULL)
118- && dwRead == sizeof (IMAGE_EXPORT_DIRECTORY))
119- {
120- LPDWORD lpdwName;
85+ && dwRead == sizeof (IMAGE_EXPORT_DIRECTORY))
86+ {
87+ LPDWORD lpdwName;
12188
122- lpdwName = HeapAlloc (hHeap, 0,
89+ lpdwName = HeapAlloc (hHeap, 0,
12390 ied.NumberOfNames * sizeof (DWORD));
124- for (i = 0; i < ifh.NumberOfSections; i++)
125- if (pish[i].VirtualAddress
126- <= ied.AddressOfNames
127- && ied.AddressOfNames
128- < pish[i].VirtualAddress
91+ for (i = 0; i < ifh.NumberOfSections; i++)
92+ if (pish[i].VirtualAddress <= ied.AddressOfNames
93+ && ied.AddressOfNames < pish[i].VirtualAddress
12994 + pish[i].SizeOfRawData
130- && SetFilePointer (hFile,
131- ied.AddressOfNames
95+ && SetFilePointer (hFile, ied.AddressOfNames
13296 - pish[i].VirtualAddress
13397 + pish[i].PointerToRawData,
13498 NULL, FILE_BEGIN)
13599 != INVALID_SET_FILE_POINTER
136- && ReadFile (hFile, lpdwName,
137- ied.NumberOfNames * sizeof (DWORD),
138- &dwRead, NULL)
139- && dwRead == ied.NumberOfNames
140- * sizeof (DWORD))
141- {
142- lpszName = HeapAlloc (hHeap, 0,
143- (ied.NumberOfNames + 1)
144- * sizeof (LPSTR));
145- lpszName[ied.NumberOfNames] = NULL;
146- for (i = 0; i < ied.NumberOfNames; i++)
147- {
148- int j;
100+ && ReadFile (hFile, lpdwName,
101+ ied.NumberOfNames * sizeof (DWORD), &dwRead, NULL)
102+ && dwRead == ied.NumberOfNames * sizeof (DWORD))
103+ {
104+ lpszName = HeapAlloc (hHeap, 0,
105+ (ied.NumberOfNames + 1) * sizeof (LPSTR));
106+ lpszName[ied.NumberOfNames] = NULL;
107+ for (i = 0; i < ied.NumberOfNames; i++)
108+ {
109+ int j;
149110
150- lpszName[i] = HeapAlloc (hHeap,
111+ lpszName[i] = HeapAlloc (hHeap,
151112 HEAP_ZERO_MEMORY, sizeof (CHAR));
152- for (j = 0; j < ifh.NumberOfSections;
153- j++)
154- if (pish[j].VirtualAddress
155- <= lpdwName[i]
156- && lpdwName[i] < pish[j]
157- .VirtualAddress
113+ for (j = 0; j < ifh.NumberOfSections; j++)
114+ if (pish[j].VirtualAddress <= lpdwName[i]
115+ && lpdwName[i] < pish[j].VirtualAddress
158116 + pish[j].SizeOfRawData
159- && SetFilePointer (hFile,
160- lpdwName[i]
117+ && SetFilePointer (hFile, lpdwName[i]
161118 - pish[j].VirtualAddress
162119 + pish[j].PointerToRawData,
163120 NULL, FILE_BEGIN)
164121 != INVALID_SET_FILE_POINTER)
165- {
166- CHAR cName;
122+ {
123+ CHAR cName;
124+ SIZE_T dwSize = 0;
167125
168- dwSize = 0;
169- while (ReadFile (hFile, &cName,
170- sizeof (CHAR), &dwRead,
171- NULL)
126+ while (ReadFile (hFile, &cName,
127+ sizeof (CHAR), &dwRead, NULL)
172128 && dwRead == sizeof (CHAR)
173- && cName != '\0')
174- {
175- lpszName[i] = HeapReAlloc
176- (hHeap,
177- 0,
178- lpszName[i],
179- (dwSize + 2)
180- * sizeof (CHAR));
181- (lpszName[i])[dwSize++]
182- = cName;
183- }
184- if (lpszName[i])
185- (lpszName[i])[dwSize] = '\0';
186- break;
187- }
188- }
189- break;
190- }
191- HeapFree (hHeap, 0, lpdwName);
192- break;
193- }
129+ && cName != '\0')
130+ {
131+ lpszName[i] = HeapReAlloc (hHeap,
132+ 0, lpszName[i],
133+ (dwSize + 2) * sizeof (CHAR));
134+ (lpszName[i])[dwSize++] = cName;
135+ }
136+ if (lpszName[i])
137+ (lpszName[i])[dwSize] = '\0';
138+ break;
139+ }
140+ }
141+ break;
194142 }
195- HeapFree (hHeap, 0, pish);
196- }
197- CloseHandle (hFile);
143+ HeapFree (hHeap, 0, lpdwName);
144+ break;
145+ }
146+ }
147+ HeapFree (hHeap, 0, pish);
148+ }
149+ CloseHandle (hFile);
150+ }
151+ return lpszName;
152+}
153+
154+
155+int
156+_tmain (int argc,
157+ _TCHAR *argv[])
158+{
159+ HANDLE hHeap;
160+ LPSTR *lpszName = NULL;
161+ DWORD dwSize;
162+
163+ hHeap = GetProcessHeap ();
164+ dwSize = SearchPath (NULL, _T("msvcrt.dll"), NULL, 0, NULL, NULL);
165+ if (dwSize > 0)
166+ {
167+ LPTSTR lpszPath;
168+
169+ lpszPath = HeapAlloc (hHeap, 0, dwSize * sizeof (TCHAR));
170+ if (SearchPath (NULL, _T("msvcrt.dll"), NULL, dwSize, lpszPath, NULL)
171+ == dwSize - 1)
172+ lpszName = LoadMsvcrt (hHeap, lpszPath);
173+ HeapFree (hHeap, 0, lpszPath);
174+ }
175+ if (!lpszName)
176+ {
177+ LPTSTR lpszEnvironment, lpszPath;
178+
179+ dwSize = GetEnvironmentVariable (_T("Path"), NULL, 0);
180+ if (dwSize > 0)
181+ {
182+ lpszEnvironment = HeapAlloc (hHeap, 0,
183+ (dwSize + 2) * sizeof (TCHAR));
184+ if (GetEnvironmentVariable (_T("Path"), lpszEnvironment, dwSize)
185+ == dwSize - 1)
186+ {
187+ lpszEnvironment[dwSize + 1] = '\0';
188+ lpszPath = lpszEnvironment;
189+ while (*lpszPath != '\0' && !lpszName)
190+ {
191+ LPTSTR lpszSeparator, lpszFile;
192+
193+ for (lpszSeparator = lpszPath;
194+ *lpszSeparator != '\0' && *lpszSeparator != ';';
195+ lpszSeparator++);
196+ *lpszSeparator = '\0';
197+ dwSize = lstrlen (lpszPath);
198+ lpszFile = HeapAlloc (hHeap, 0, (dwSize
199+ + lstrlen (_T("msvcrt.dll")) + 2) * sizeof (TCHAR));
200+ lstrcpy (lpszFile, lpszPath);
201+ if (lpszFile[dwSize - 1] != '\\')
202+ lstrcat (lpszFile, _T("\\"));
203+ lstrcat (lpszFile, _T("msvcrt.dll"));
204+ lpszName = LoadMsvcrt (hHeap, lpszFile);
205+ HeapFree (hHeap, 0, lpszFile);
206+ lpszPath += lstrlen (lpszPath) + 1;
198207 }
199- lpszPath += lstrlen (lpszPath) + 1;
200208 }
209+ HeapFree (hHeap, 0, lpszEnvironment);
201210 }
202- HeapFree (hHeap, 0, lpszEnvironment);
203211 }
204212 if (lpszName)
205213 {
@@ -214,15 +222,16 @@
214222 for (i = 0; lpszName[i]; i++)
215223 {
216224 int j;
217- LPSTR lpszPrivate[] = {"\?\?_E__non_rtti_object@@UAEPAXI@Z",
218- "\?\?_Ebad_cast@@UAEPAXI@Z",
219- "\?\?_Ebad_typeid@@UAEPAXI@Z",
220- "\?\?_Eexception@@UAEPAXI@Z",
221- "\?\?_G__non_rtti_object@@UAEPAXI@Z",
222- "\?\?_Gbad_cast@@UAEPAXI@Z",
223- "\?\?_Gbad_typeid@@UAEPAXI@Z",
224- "\?\?_Gexception@@UAEPAXI@Z",
225+ LPSTR lpszPrivate[] = {"??_E__non_rtti_object@@UAEPAXI@Z",
226+ "??_Ebad_cast@@UAEPAXI@Z",
227+ "??_Ebad_typeid@@UAEPAXI@Z",
228+ "??_Eexception@@UAEPAXI@Z",
229+ "??_G__non_rtti_object@@UAEPAXI@Z",
230+ "??_Gbad_cast@@UAEPAXI@Z",
231+ "??_Gbad_typeid@@UAEPAXI@Z",
232+ "??_Gexception@@UAEPAXI@Z",
225233 NULL};
234+
226235 for (j = 0; lpszPrivate[j]; j++)
227236 if (lstrcmpA (lpszName[i], lpszPrivate[j]) == 0)
228237 break;
--- mmaid/trunk/iwmcrt/Makefile.am (revision 142)
+++ mmaid/trunk/iwmcrt/Makefile.am (revision 143)
@@ -24,6 +24,7 @@
2424 main.c \
2525 maincrtstartup.c \
2626 onexit.c \
27+ report_rangecheckfailure.c \
2728 security.c \
2829 set_invalid_parameter_handler.c \
2930 stat32.c \
--- mmaid/trunk/po/ja.po (revision 142)
+++ mmaid/trunk/po/ja.po (revision 143)
@@ -4,7 +4,7 @@
44 #
55 msgid ""
66 msgstr ""
7-"Project-Id-Version: mmaid 0.4.2\n"
7+"Project-Id-Version: mmaid 0.4.3\n"
88 "Report-Msgid-Bugs-To: http://www.maid.org/\n"
99 "POT-Creation-Date: 2013-05-29 03:59+0900\n"
1010 "PO-Revision-Date: 2004-01-04 23:14+0900\n"
Show on old repository browser