WonderWitch 技術情報 2001/06/20

2001年6月20日公開の技術情報です。

touch()がデータ領域を破壊していました

標準ライブラリ関数 touch() が利用する FsIL の機能 _touch() で、 ファイル更新日時を設定するプログラムにおいて SRAM 領域のバンク切替えに問題があり、 ユーザデータ領域や画面データ領域を破壊していました。

このため、この機能に依存するファイル操作機能を実行すると、画面上にゴミが表示されたり、 ユーザデータの一部が壊れるなどの問題が発生していました。

この問題を修正した FreyaOS、および、ライブラリをダウンロードページで提供しました。

ダウンロードページ


write()、fwrite()がデータ領域を破壊していました

標準ライブラリ関数 write()、fwrite() で、書き込み完了後にファイル更新日時を再設定するために、 touch() 機能を内部で呼び出していました。このため、ファイルへの書き込みを行なうと、 ユーザデータ領域や画面データ領域を破壊していました。 (詳しくは「touch()がデータ領域を破壊していました」を参照下さい)

この問題を修正した FreyaOS、および、ライブラリをダウンロードページで提供しました。

ダウンロードページ


open()がエラーコードを正しく返していませんでした

標準ライブラリ関数 open() が、ファイルオープンに失敗した際、 オープンに失敗した理由を表すエラーコードを返すべきところ、 常に -1 を返していました。

この問題を修正したライブラリをダウンロードページで提供しました。

ダウンロードページ


makefile.tcc、makefile.dmcで複数オブジェクトのリンクが正しく行なえませんでした

\WWitch\samples ディレクトリに提供されている、 Turbo C 用 makefile (makefile.tcc) と Digital Mars C++ 用 makefile (makefile.dmc) に問題があり、 複数オブジェクトのリンクが正しく行なえませんでした。

この問題を修正した各 makefile をダウンロードページで提供しました。

ダウンロードページ


512ブロック以上の長さのファイルに正しく書き込めませんでした

ファイルシステムに書き込みを行なうストリームドライバ機能に問題があり、 512 ブロック (65536 バイト) 以上の長さを持つファイルへ正しく書き込みを行なうことができませんでした。

この問題を修正した FreyaOS をダウンロードページで提供しました。

ダウンロードページ


RunnableILの呼出形式が正しくありませんでした

RunnableIL の機能、_exec() の呼出形式に問題があり、引数を正しく受け取ることができませんでした。 \WWitch\include\sys\indirect.h を修正し、RunnableIL の定義を以下のようにしました。
typedef struct {
    IL super;
    int (far *_exec)(int argc, char far * far argv[]);
} RunnableIL;

この問題を修正したヘッダーファイルをダウンロードページで提供しました。

ダウンロードページ


LSI Cでstrerror()が解決できず正しくリンクできませんでした

LSI C-86 for WonderWitch で、perror() 関数や errno 変数を参照していた場合、 strerror() 関数が定義されておらず正しくリンクできませんでした。 以下の仕様をもつ strerror() 関数を提供し、\WWitch\include\stdio.h にプロトタイプ宣言を追加しました。
C言語呼び出し形式
char far *strerror(int errno);
引数:
errno エラーコード
戻り値:
エラー文字列

機能詳細:
引数で指定されたエラーコードに対応するエラー文字列を得ます。

この問題を修正したヘッダーファイル、および、ライブラリをダウンロードページで提供しました。

ダウンロードページ


tmpnam()の生成するファイル名が正しくありませんでした

標準ライブラリ関数 tmpnam() が呼出毎にユニークなテンポラリファイル名を正しく生成していませんでした。 このため、この関数を内部で利用する tmpfile() 関数もユニークなテンポラリファイルを作成していませんでした。

この問題を修正したライブラリをダウンロードページで提供しました。

ダウンロードページ


Turbo Cでsrand()、rand()を使用すると正しくリンクできませんでした

ライブラリに含まれる srand() 関数、rand() 関数は、LSI C をもちいてコンパイルされていたため、 Turbo C で srand() 関数および rand() 関数を使用すると、 LMUL_ がないというエラーで正しくリンクできませんでした。

この問題を修正したライブラリをダウンロードページで提供しました。

ダウンロードページ


fread()の返り値が正しくありませんでした

ライブラリ関数 fread() に問題があり、読み込んだバイト数を正しく返さない場合がありました。

この問題を修正したライブラリをダウンロードページで提供しました。

ダウンロードページ


Turbo Cに不要なライブラリが指定されていました

\WWitch\samples\makefile.tcc が参照する libww.rsp において、 Turbo C のリンクには不要な LSI C-86 for WonderWitch 用のライブラリが指定されていました。

この問題を修正した libww.rsp をダウンロードページで提供しました。

ダウンロードページ


同一ファイルに対して同時にライトオープンとリードオープンを行なうと読み込みが正しく行なえない問題がありました

同一ファイルに対して、ライトオープンとリードオープンを同時に行なっている場合、 ライトオープンしているファイルハンドルで書き込んだ結果ファイルサイズが変化しても、 リードオープンしているファイルハンドル側に反映されていませんでした。 このため、リードオープン側で正しくファイルの内容を読み込むことができませんでした。

この問題を修正した FreyaOS をダウンロードページで提供しました。

ダウンロードページ


Copyright (C) 2001 Qute Corporation. All rights reserved.