OSDN Git Service

(none)
authorryuz <ryuz>
Mon, 17 Aug 2009 09:53:13 +0000 (09:53 +0000)
committerryuz <ryuz>
Mon, 17 Aug 2009 09:53:13 +0000 (09:53 +0000)
aplfw/application/syscmd/shell/shell_executescript.c
aplfw/library/container/assoc/assoc_set.c
aplfw/system/process/process.h
aplfw/system/process/process_getenvstring.c
aplfw/system/process/process_setenvstring.c
aplfw/system/system/system_initialize.c

index 225eee7..d4d40e5 100755 (executable)
@@ -20,7 +20,7 @@ int Shell_ExecuteScript(C_SHELL *self, const char *pszFileName)
        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;
index a89afad..cf71a29 100755 (executable)
 
 
 
+/* データの登録 */
+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 */
index a277e9f..bbf588a 100755 (executable)
@@ -86,7 +86,7 @@ void          Process_SetParam(HANDLE hProcess, VPARAM Param);                                                                        /**< プ
 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);                                                                                 /**< プロセスのカレントディレクトリ取得 */
index fffff4f..d7831c7 100755 (executable)
 #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 )
@@ -27,8 +28,20 @@ void Process_SetParam(HANDLE hProcess, VPARAM Param)
        /* ハンドルをキャスト */
        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;
 }
 
 
index be9027f..424fbc9 100755 (executable)
@@ -39,7 +39,7 @@ void Process_SetEnvString(HANDLE hProcess, const char *pszKey, const char *pszVa
        }
        
        /* パラメータを設定 */
-       Assoc_Add(self->pEnv, pszKey, pszValue, strlen(pszValue)+1);
+       Assoc_Set(self->pEnv, pszKey, pszValue, strlen(pszValue)+1);
 }
 
 
index b7918a3..cba0ccd 100755 (executable)
@@ -63,7 +63,7 @@ void System_Initialize(const T_SYSTEM_INITIALIZE_INF *pInf)
        pProcessInf->hStdIn         = HANDLE_NULL;                              /* 標準入力 */
        pProcessInf->hStdOut        = HANDLE_NULL;                              /* 標準出力 */
        pProcessInf->hStdErr        = HANDLE_NULL;                              /* 標準エラー出力 */
-       pProcessInf->pszCurrentDir  = "";                                               /* カレントディレクトリ */
+       pProcessInf->pszCurrentDir  = "/";                                              /* カレントディレクトリ */
        Process_Constructor(&self->Process, NULL, pProcessInf);
        
        /* ブートプロセスの起動依頼 */
@@ -78,7 +78,7 @@ void System_Initialize(const T_SYSTEM_INITIALIZE_INF *pInf)
        pProcessInf->hStdIn         = HANDLE_NULL;                              /* 標準入力 */
        pProcessInf->hStdOut        = HANDLE_NULL;                              /* 標準出力 */
        pProcessInf->hStdErr        = HANDLE_NULL;                              /* 標準エラー出力 */
-       pProcessInf->pszCurrentDir  = "";                                               /* カレントディレクトリ */
+       pProcessInf->pszCurrentDir  = "/";                                              /* カレントディレクトリ */
        System_RequestProc(System_BootProcess, (VPARAM)self, (VPARAM)pProcessInf);
 }