source: lab.git/Dev/utvpn/utvpn-unix-v101-7101-public/src/Mayaqua/OS.c @ 86521dd

trunk
Last change on this file since 86521dd was a1bae3e, checked in by mitty <mitty@…>, 12 years ago
  • copy vendor drop to trunk

git-svn-id: https://lab.mitty.jp/svn/lab/trunk@147 7d2118f6-f56c-43e7-95a2-4bb3031d96e7

  • Property mode set to 100644
File size: 13.2 KB
Line 
1// SoftEther UT-VPN SourceCode
2//
3// Copyright (C) 2004-2010 SoftEther Corporation.
4// Copyright (C) 2004-2010 University of Tsukuba, Japan.
5// Copyright (C) 2003-2010 Daiyuu Nobori.
6// All Rights Reserved.
7//
8// http://utvpn.tsukuba.ac.jp/
9//
10// This program is free software; you can redistribute it and/or
11// modify it under the terms of the GNU General Public License
12// version 2 as published by the Free Software Foundation.
13//
14// This program is distributed in the hope that it will be useful,
15// but WITHOUT ANY WARRANTY; without even the implied warranty of
16// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17// GNU General Public License for more details.
18//
19// You should have received a copy of the GNU General Public License version 2
20// along with this program; if not, write to the Free Software
21// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22//
23// このファイルは GPL バージョン 2 ライセンスで公開されています。
24// 誰でもこのファイルの内容を複製、改変したり、改変したバージョンを再配布
25// することができます。ただし、原著作物を改変した場合は、原著作物の著作権表示
26// を除去することはできません。改変した著作物を配布する場合は、改変実施者の
27// 著作権表示を原著作物の著作権表示に付随して記載するようにしてください。
28//
29// この SoftEther UT-VPN オープンソース・プロジェクトは、日本国の
30// ソフトイーサ株式会社 (SoftEther Corporation, http://www.softether.co.jp/ )
31// および筑波大学 (University of Tsukuba, http://www.tsukuba.ac.jp/ ) によって
32// ホストされています。
33// 本プログラムの配布者は、本プログラムを、業としての利用以外のため、
34// および、試験または研究のために利用が行われることを想定して配布
35// しています。
36// SoftEther UT-VPN プロジェクトの Web サイトは http://utvpn.tsukuba.ac.jp/ に
37// あります。
38// 本ソフトウェアの不具合の修正、機能改良、セキュリティホールの修復などのコード
39// の改変を行った場合で、その成果物を SoftEther UT-VPN プロジェクトに提出して
40// いただける場合は、 http://utvpn.tsukuba.ac.jp/ までソースコードを送付して
41// ください。SoftEther UT-VPN プロジェクトの本体リリースまたはブランチリリース
42// に組み込みさせていただきます。
43//
44// GPL に基づいて原著作物が提供される本ソフトウェアの改良版を配布、販売する
45// 場合は、そのソースコードを GPL に基づいて誰にでも開示する義務が生じます。
46//
47// 本ソフトウェアに関連する著作権、特許権、商標権はソフトイーサ株式会社
48// (SoftEther Corporation) およびその他の著作権保持者が保有しています。
49// ソフトイーサ株式会社等はこれらの権利を放棄していません。本ソフトウェアの
50// 二次著作物を配布、販売する場合は、これらの権利を侵害しないようにご注意
51// ください。
52//
53// お願い: どのような通信ソフトウェアにも通常は必ず未発見の
54// セキュリティホールが潜んでいます。本ソースコードをご覧いただいた結果、
55// UT-VPN にセキュリティホールを発見された場合は、当該セキュリティホールの
56// 情報を不特定多数に開示される前に、必ず、ソフトイーサ株式会社
57// および脆弱性情報の届出を受け付ける公的機関まで通報いただき、
58// 公益保護にご協力いただきますようお願い申し上げます。
59//
60// ソフトイーサ株式会社は、当該セキュリティホールについて迅速に対処を
61// 行い、UT-VPN および UT-VPN に関連するソフトウェアのユーザー・顧客
62// を保護するための努力を行います。
63//
64// ソフトイーサへの届出先: http://www.softether.co.jp/jp/contact/
65// 日本国内の脆弱性情報届出受付公的機関:
66//         独立行政法人 情報処理推進機構
67//         http://www.ipa.go.jp/security/vuln/report/
68//
69// 上記各事項について不明な点は、ソフトイーサ株式会社までご連絡ください。
70// 連絡先: http://www.softether.co.jp/jp/contact/
71
72// -----------------------------------------------
73// [ChangeLog]
74// 2010.05.20
75//  新規リリース by SoftEther
76// -----------------------------------------------
77
78// OS.c
79// オペレーティングシステム依存コード
80
81#include <stdio.h>
82#include <stdlib.h>
83#include <string.h>
84#include <wchar.h>
85#include <stdarg.h>
86#include <time.h>
87#include <errno.h>
88#include <Mayaqua/Mayaqua.h>
89
90#undef  Lock
91#undef  Unlock
92
93// ディスパッチテーブル
94static OS_DISPATCH_TABLE *os = NULL;
95
96// OS 種類を文字列に変換
97char *OsTypeToStr(UINT type)
98{
99    switch (type)
100    {
101    case 0:
102        return "Unsupported OS by SoftEther Corporation\0\n";
103    case OSTYPE_WINDOWS_95:
104        return "Windows 95\0\n";
105    case OSTYPE_WINDOWS_98:
106        return "Windows 98\0\n";
107    case OSTYPE_WINDOWS_ME:
108        return "Windows Millennium Edition\0\n";
109    case OSTYPE_WINDOWS_UNKNOWN:
110        return "Windows 9x Unknown Version\0\n";
111    case OSTYPE_WINDOWS_NT_4_WORKSTATION:
112        return "Windows NT 4.0 Workstation\0\n";
113    case OSTYPE_WINDOWS_NT_4_SERVER:
114        return "Windows NT 4.0 Server\0\n";
115    case OSTYPE_WINDOWS_NT_4_SERVER_ENTERPRISE:
116        return "Windows NT 4.0 Server, Enterprise Edition\0\n";
117    case OSTYPE_WINDOWS_NT_4_BACKOFFICE:
118        return "BackOffice Server 4.5\0\n";
119    case OSTYPE_WINDOWS_NT_4_SMS:
120        return "Small Business Server 4.5\0\n";
121    case OSTYPE_WINDOWS_2000_PROFESSIONAL:
122        return "Windows 2000 Professional\0\n";
123    case OSTYPE_WINDOWS_2000_SERVER:
124        return "Windows 2000 Server\0\n";
125    case OSTYPE_WINDOWS_2000_ADVANCED_SERVER:
126        return "Windows 2000 Advanced Server\0\n";
127    case OSTYPE_WINDOWS_2000_DATACENTER_SERVER:
128        return "Windows 2000 Datacenter Server\0\n";
129    case OSTYPE_WINDOWS_2000_BACKOFFICE:
130        return "BackOffice Server 2000\0\n";
131    case OSTYPE_WINDOWS_2000_SBS:
132        return "Small Business Server 2000\0\n";
133    case OSTYPE_WINDOWS_XP_HOME:
134        return "Windows XP Home Edition\0\n";
135    case OSTYPE_WINDOWS_XP_PROFESSIONAL:
136        return "Windows XP Professional\0\n";
137    case OSTYPE_WINDOWS_2003_WEB:
138        return "Windows Server 2003 Web Edition\0\n";
139    case OSTYPE_WINDOWS_2003_STANDARD:
140        return "Windows Server 2003 Standard Edition\0\n";
141    case OSTYPE_WINDOWS_2003_ENTERPRISE:
142        return "Windows Server 2003 Enterprise Edition\0\n";
143    case OSTYPE_WINDOWS_2003_DATACENTER:
144        return "Windows Server 2003 Datacenter Edition\0\n";
145    case OSTYPE_WINDOWS_2003_BACKOFFICE:
146        return "BackOffice Server 2003\0\n";
147    case OSTYPE_WINDOWS_2003_SBS:
148        return "Small Business Server 2003\0\n";
149    case OSTYPE_WINDOWS_LONGHORN_PROFESSIONAL:
150        return "Windows Vista\0\n";
151    case OSTYPE_WINDOWS_LONGHORN_SERVER:
152        return "Windows Server 2008\0\n";
153    case OSTYPE_WINDOWS_7:
154        return "Windows 7\0\n";
155    case OSTYPE_WINDOWS_SERVER_2008_R2:
156        return "Windows Server 2008 R2\0\n";
157    case OSTYPE_WINDOWS_8:
158        return "Windows 8 or greater\0\n";
159    case OSTYPE_WINDOWS_SERVER_8:
160        return "Windows Server 8 or greater\0\n";
161    case OSTYPE_UNIX_UNKNOWN:
162        return "UNIX System\0\n";
163    case OSTYPE_LINUX:
164        return "Linux\0\n";
165    case OSTYPE_SOLARIS:
166        return "Sun Solaris\0\n";
167    case OSTYPE_CYGWIN:
168        return "Gnu Sygwin\0\n";
169    case OSTYPE_BSD:
170        return "BSD System\0\n";
171    case OSTYPE_MACOS_X:
172        return "Mac OS X\0\n";
173    }
174
175    return "Unknown OS";
176}
177
178// 初期化
179void OSInit()
180{
181    // ディスパッチテーブルの取得
182#ifdef  OS_WIN32
183    os = Win32GetDispatchTable();
184#else   // OS_WIN32
185    os = UnixGetDispatchTable();
186#endif  // OS_WIN32
187
188    // OS 固有の初期化関数の呼び出し
189    os->Init();
190}
191
192// 解放
193void OSFree()
194{
195    os->Free();
196}
197
198// メモリ情報取得
199void OSGetMemInfo(MEMINFO *info)
200{
201    // 引数チェック
202    if (info == NULL)
203    {
204        return;
205    }
206
207    os->GetMemInfo(info);
208}
209
210// イールド
211void OSYield()
212{
213    os->Yield();
214}
215
216// シングルインスタンス開始
217void *OSNewSingleInstance(char *instance_name)
218{
219    return os->NewSingleInstance(instance_name);
220}
221
222void OSFreeSingleInstance(void *data)
223{
224    os->FreeSingleInstance(data);
225}
226
227// 優先順位を上げる
228void OSSetHighPriority()
229{
230    os->SetHighPriority();
231}
232
233// 優先順位を戻す
234void OSRestorePriority()
235{
236    os->RestorePriority();
237}
238
239// プロダクト ID の取得
240char* OSGetProductId()
241{
242    return os->GetProductId();
243}
244
245// OS がサポートされているかどうかチェックする
246bool OSIsSupportedOs()
247{
248    return os->IsSupportedOs();
249}
250
251// OS 情報の取得
252void OSGetOsInfo(OS_INFO *info)
253{
254    os->GetOsInfo(info);
255}
256
257// アラートの表示
258void OSAlert(char *msg, char *caption)
259{
260    os->Alert(msg, caption);
261}
262void OSAlertW(wchar_t *msg, wchar_t *caption)
263{
264    os->AlertW(msg, caption);
265}
266
267// プロセス起動
268bool OSRun(char *filename, char *arg, bool hide, bool wait)
269{
270    return os->Run(filename, arg, hide, wait);
271}
272bool OSRunW(wchar_t *filename, wchar_t *arg, bool hide, bool wait)
273{
274    return os->RunW(filename, arg, hide, wait);
275}
276
277// スレッド ID の取得
278UINT OSThreadId()
279{
280    return os->ThreadId();
281}
282
283// リネーム
284bool OSFileRename(char *old_name, char *new_name)
285{
286    return os->FileRename(old_name, new_name);
287}
288bool OSFileRenameW(wchar_t *old_name, wchar_t *new_name)
289{
290    return os->FileRenameW(old_name, new_name);
291}
292
293// ファイルサイズを取得する
294UINT64 OSFileSize(void *pData)
295{
296    return os->FileSize(pData);
297}
298
299// ファイルをシークする
300bool OSFileSeek(void *pData, UINT mode, int offset)
301{
302    return os->FileSeek(pData, mode, offset);
303}
304
305// ファイルを削除する
306bool OSFileDelete(char *name)
307{
308    return os->FileDelete(name);
309}
310bool OSFileDeleteW(wchar_t *name)
311{
312    return os->FileDeleteW(name);
313}
314
315// ディレクトリを作成する
316bool OSMakeDir(char *name)
317{
318    return os->MakeDir(name);
319}
320bool OSMakeDirW(wchar_t *name)
321{
322    return os->MakeDirW(name);
323}
324
325// ディレクトリを削除する
326bool OSDeleteDir(char *name)
327{
328    return os->DeleteDir(name);
329}
330bool OSDeleteDirW(wchar_t *name)
331{
332    return os->DeleteDirW(name);
333}
334
335// ファイルを開く
336void *OSFileOpen(char *name, bool write_mode, bool read_lock)
337{
338    return os->FileOpen(name, write_mode, read_lock);
339}
340void *OSFileOpenW(wchar_t *name, bool write_mode, bool read_lock)
341{
342    return os->FileOpenW(name, write_mode, read_lock);
343}
344
345// ファイルを作成する
346void *OSFileCreate(char *name)
347{
348    return os->FileCreate(name);
349}
350void *OSFileCreateW(wchar_t *name)
351{
352    return os->FileCreateW(name);
353}
354
355// ファイルに書き込む
356bool OSFileWrite(void *pData, void *buf, UINT size)
357{
358    return os->FileWrite(pData, buf, size);
359}
360
361// ファイルから読み込む
362bool OSFileRead(void *pData, void *buf, UINT size)
363{
364    return os->FileRead(pData, buf, size);
365}
366
367// ファイルを閉じる
368void OSFileClose(void *pData, bool no_flush)
369{
370    os->FileClose(pData, no_flush);
371}
372
373// ファイルのフラッシュ
374void OSFileFlush(void *pData)
375{
376    os->FileFlush(pData);
377}
378
379// コールスタックの取得
380CALLSTACK_DATA *OSGetCallStack()
381{
382    return os->GetCallStack();
383}
384
385// シンボル情報の取得
386bool OSGetCallStackSymbolInfo(CALLSTACK_DATA *s)
387{
388    return os->GetCallStackSymbolInfo(s);
389}
390
391// スレッドの終了を待機
392bool OSWaitThread(THREAD *t)
393{
394    return os->WaitThread(t);
395}
396
397// スレッドの解放
398void OSFreeThread(THREAD *t)
399{
400    os->FreeThread(t);
401}
402
403// スレッドの初期化
404bool OSInitThread(THREAD *t)
405{
406    return os->InitThread(t);
407}
408
409// メモリ確保
410void *OSMemoryAlloc(UINT size)
411{
412    return os->MemoryAlloc(size);
413}
414
415// メモリ再確保
416void *OSMemoryReAlloc(void *addr, UINT size)
417{
418    return os->MemoryReAlloc(addr, size);
419}
420
421// メモリ解放
422void OSMemoryFree(void *addr)
423{
424    os->MemoryFree(addr);
425}
426
427// システムタイマの取得
428UINT OSGetTick()
429{
430    return os->GetTick();
431}
432
433// システム時刻の取得
434void OSGetSystemTime(SYSTEMTIME *system_time)
435{
436    os->GetSystemTime(system_time);
437}
438
439// 32bit インクリメント
440void OSInc32(UINT *value)
441{
442    os->Inc32(value);
443}
444
445// 32bit デクリメント
446void OSDec32(UINT *value)
447{
448    os->Dec32(value);
449}
450
451// スレッドの休止
452void OSSleep(UINT time)
453{
454    os->Sleep(time);
455}
456
457// ロック作成
458LOCK *OSNewLock()
459{
460    return os->NewLock();
461}
462
463// ロック
464bool OSLock(LOCK *lock)
465{
466    return os->Lock(lock);
467}
468
469// ロック解除
470void OSUnlock(LOCK *lock)
471{
472    os->Unlock(lock);
473}
474
475// ロック削除
476void OSDeleteLock(LOCK *lock)
477{
478    os->DeleteLock(lock);
479}
480
481// イベント初期化
482void OSInitEvent(EVENT *event)
483{
484    os->InitEvent(event);
485}
486
487// イベントのセット
488void OSSetEvent(EVENT *event)
489{
490    os->SetEvent(event);
491}
492
493// イベントのリセット
494void OSResetEvent(EVENT *event)
495{
496    os->ResetEvent(event);
497}
498
499// イベントの待機
500bool OSWaitEvent(EVENT *event, UINT timeout)
501{
502    return os->WaitEvent(event, timeout);
503}
504
505// イベントの解放
506void OSFreeEvent(EVENT *event)
507{
508    os->FreeEvent(event);
509}
510
Note: See TracBrowser for help on using the repository browser.