int iLen;
/* ファイルオープン */
- if ( (hFile = File_Open(pszFileName, FILE_OPEN_READ | FILE_OPEN_TEXT)) == HANDLE_NULL )
+ if ( (hFile = File_Open(pszFileName, FILE_OPEN_READ | FILE_OPEN_EXIST | FILE_OPEN_TEXT)) == HANDLE_NULL )
{
StdIo_PrintFormat("open error : %s\n", pszFileName);
return 1;
+/* データの登録 */
+ASSOC_ERR Assoc_Set(C_ASSOC *self, const char *pszKey, const void *pData, long lSize)
+{
+ char *pMem;
+ T_ASSOC_NODE *pNode;
+ T_ASSOC_NODE *pOldNode;
+ int iKeyLen;
+
+ /* ノード生成 */
+ iKeyLen = MemHeap_AlignSize(self->pMemHeap, strlen(pszKey) + 1);
+ if ( (pMem = MemHeap_Alloc(self->pMemHeap, sizeof(T_ASSOC_NODE) + iKeyLen + lSize)) == NULL )
+ {
+ return ASSOC_ERR_NG;
+ }
+ pNode = (T_ASSOC_NODE *)pMem;
+ pMem += sizeof(T_ASSOC_NODE);
+ strcpy(pMem, pszKey);
+ pMem += iKeyLen;
+ memcpy(pMem, pData, lSize);
+
+ /* 追加 */
+ pNode->pLeft = NULL;
+ pNode->pRight = NULL;
+ if ( self->pRoot == NULL )
+ {
+ /* 最初の1個 */
+ pNode->pParent = NULL;
+ self->pRoot = pNode;
+ }
+ else
+ {
+ if ( (pOldNode = Assoc_AddNode(self->pRoot, pNode)) != NULL )
+ {
+ /* 置き換える */
+ pNode->pParent = pOldNode->pParent;
+ pNode->pLeft = pOldNode->pLeft;
+ pNode->pRight = pOldNode->pRight;
+ if ( pNode->pParent == NULL ) { self->pRoot = pNode; }
+ if ( pNode->pLeft != NULL ) { pNode->pLeft->pParent = pNode; }
+ if ( pNode->pRight != NULL ) { pNode->pRight->pParent = pNode; }
+ MemHeap_Free(self->pMemHeap, pOldNode);
+ }
+ }
+
+ return ASSOC_ERR_OK;
+}
+
/* end of file */
VPARAM Process_GetParam(HANDLE hProcess); /**< プロセス固有情報の取得 */
void Process_SetEnvString(HANDLE hProcess, const char *pszKey, const char *pszValue); /**< 環境変数設定 */
-const char *Process_GetEnvString(HANDLE hProcess, const char *pszKey, const char *pszValue); /**< 環境変数取得 */
+const char *Process_GetEnvString(HANDLE hProcess, const char *pszKey); /**< 環境変数取得 */
int Process_SetCurrentDir(HANDLE hProcess, const char *pszPath); /**< プロセスのカレントディレクトリ設定 */
const char *Process_GetCurrentDir(HANDLE hProcess); /**< プロセスのカレントディレクトリ取得 */
#include "process_local.h"
-
-/** プロセス固有情報の設定 */
-void Process_SetParam(HANDLE hProcess, VPARAM Param)
+/** 環境変数取得 */
+const char *Process_GetEnvString(HANDLE hProcess, const char *pszKey)
{
- C_PROCESS *self;
+ const char *pszValue = NULL;
+ C_PROCESS *self;
+ HANDLE hParent;
/* 指定が無ければ現在のプロセスとする */
if ( hProcess == HANDLE_NULL )
/* ハンドルをキャスト */
self = (C_PROCESS *)hProcess;
- /* パラメータを設定 */
- self->Param = Param;
+ if ( self->pEnv != NULL )
+ {
+ pszValue = Assoc_Get(self->pEnv, pszKey);
+ }
+
+ if ( pszValue == NULL )
+ {
+ if ( (hParent = Process_GetParentProcess(hProcess)) != HANDLE_NULL )
+ {
+ pszValue = Process_GetEnvString(hParent, hProcess);
+ }
+ }
+
+ return pszValue;
}
}
/* パラメータを設定 */
- Assoc_Add(self->pEnv, pszKey, pszValue, strlen(pszValue)+1);
+ Assoc_Set(self->pEnv, pszKey, pszValue, strlen(pszValue)+1);
}
pProcessInf->hStdIn = HANDLE_NULL; /* 標準入力 */
pProcessInf->hStdOut = HANDLE_NULL; /* 標準出力 */
pProcessInf->hStdErr = HANDLE_NULL; /* 標準エラー出力 */
- pProcessInf->pszCurrentDir = ""; /* カレントディレクトリ */
+ pProcessInf->pszCurrentDir = "/"; /* カレントディレクトリ */
Process_Constructor(&self->Process, NULL, pProcessInf);
/* ブートプロセスの起動依頼 */
pProcessInf->hStdIn = HANDLE_NULL; /* 標準入力 */
pProcessInf->hStdOut = HANDLE_NULL; /* 標準出力 */
pProcessInf->hStdErr = HANDLE_NULL; /* 標準エラー出力 */
- pProcessInf->pszCurrentDir = ""; /* カレントディレクトリ */
+ pProcessInf->pszCurrentDir = "/"; /* カレントディレクトリ */
System_RequestProc(System_BootProcess, (VPARAM)self, (VPARAM)pProcessInf);
}