XINU
|
XINUシェルが作成したコマンドプロセスのスタックに引数argv(任意個)のローカルコピーを追加する。 More...
Go to the source code of this file.
Functions | |
status | addargs (pid32 pid, int32 ntok, int32 tok[], int32 tlen, char *tokbuf, void *dummy) |
XINUシェルが作成したコマンドプロセスのスタックに引数argv(任意個)のローカルコピーを追加する。 More... | |
XINUシェルが作成したコマンドプロセスのスタックに引数argv(任意個)のローカルコピーを追加する。
Definition in file addargs.c.
XINUシェルが作成したコマンドプロセスのスタックに引数argv(任意個)のローカルコピーを追加する。
Step1. 割り込みを禁止する。
Step2. 「引数の数が0以下」もしくは「トークンバッファの中にあるデータの長さが0以下」であれば、
割り込み状態を復元し、処理を修正する。
Step3. args配列と引数文字列(トークンバッファ)を続けて格納するために、プロセススタックの最下位の場所を計算する。
4Byte単位での丸め計算も行うため、args配列はユーザスタック最下位かその次の4byteの倍数アドレスから始まる。
最下位アドレス:[トークン1へのポインタ][トークン2へのポインタ][NULL][トークン1][NULL][トークン2]...:最上位アドレス
Step4. 文字列は可変長のため、args配列を超えた最初の位置を計算する。
Step5. args配列に格納されたポインタ(各引数へのポインタ)に対して、文字列領域開始アドレスをオフセットとして加え、
スタック最下位から順に格納する。 Step6. args配列に格納されたポインタの後に、区切りとしてNULLを付与する。
Step7. 引数文字列をargs配列(+ NULL)を超えた位置にコピーする。
Step8. プロセススタック中の第2引数(XINUシェルがプロセスをcreate()した際にスタックに追加した引数であり、
引数dummyと同じアドレスを持つ)を探し、第2引数の内容をプロセススタック中のargs配列アドレスに置換する。
Step9. 割り込みを許可状態に復元する。
[in] | pid | 使用するプロセスID |
[in] | ntok | 引数の数 |
[in] | tok | トークンバッファの中にあるトークンのインデックス |
[in] | tlen | トークンバッファの中にあるデータの長さ |
[in] | tokbuf | NULLで終わるトークン配列 |
[in,out] | dummy | 生成時に使用されるダミー引数。引数の配列へのポインタで置き換える必要がある。 |
Definition at line 33 of file addargs.c.
References disable(), memcpy(), NULL, OK, proctab, procent::prstkbase, procent::prstklen, procent::prstkptr, restore(), and SYSERR.
Referenced by shell().