'2007/10'에 해당되는 글 2건

  1. 2007/10/16 가끔은 내 실수가 아닐 때도 있다. by 키네낵
  2. 2007/10/05 주저리 주저리 by 키네낵 (4)
그렇다. 가끔은 내 실수가 아닐 때도 있다.

pspsdk에는 File Io 관련 함수들이 다수 존재한다.

아마도 소니 자체 펌웨어의 시스템 콜과 연결된 것이라 예상되는데,

그들도 완벽하진 않을 터... 상당수 버그가 존재한다.

몇개의 버그는 전에 내가 sceIoDread란 제목으로 포스팅 한 적이 있으니 참고하길...

이번엔 sceIoOpen과 관련된 버그이다. 어떤 함수인지 설명은 생략하겠다.

sceIoOpen으로 열 때, 그 파일이 롱네임 엔트리를 포함하고 있으면(또는 멀티바이트 문자를 포함하고 있다면), 버그가 일어난다.

물론 처음 몇번은 버그가 일어나지 않을 수도 있다.

그러나 메모리 누수인지는 잘 모르겠으나, 파일명 이름이 길면 길수록 에러가 더 빨리 일어난다.

한 글자 한글 이름으로 파일을 만들고 테스트 해보았을 때는 약 30여회 정도 열고 닫을 수 있었다.

그 다음에 실행하면 sceIoOpen을 못한다. 비단 그 파일 뿐만이 아니라, 다른 파일도 열 수 없다는게 문제... (즉 한번 에러가 발생하면, 다른 모든 파일을 열 수가 없어진다.)

그런데 파일명의 길이가 길어질수록 사용할 수 있는 횟수가 점점 짧아진다.

처음엔 내 자체 코드의 문제인줄 알고 디버그를 해보았으나, 결국엔 sceIoOpen의 문제점으로 밝혀졌다.

이거, 또 직접 FAT에 접근해서 조작하는 함수를 만들어 놔야겠군...

(작업이 완료되면, FAT 관련 소스를 올리도록 하겠다.)

정정: sceIoOpen은 여러개를 사용해 놓으면 버그가 일어 나는 것 같다.
프로그램 시작점에서 FAT_Init()를 하고, 프로그램 종료점에서 FAT_End()를 하는데
여기서 각각 sceIoOpen으로 열어 두었던 파일핸들을 sceIoClose로 닫는다.
그런데, 그 사이에 sceIoOpen을 여러번 쓰니깐 이러한 버그가 일어 나는 것 같다.
필요할 때만 열어두는 습관을 들이자. (덕분에 버그는 해결...OK)
Posted by 키네낵
TAG sceIoOpen

주저리 주저리

Misc. 2007/10/05 17:27

하아... 나도 참 한심하네 -_-;;

고작 알파벳 하나 틀린 코드 갖다가 하루씩이나 버그를 찾아대다니 -_-;;

어제 내가 만든 홈브류를 테스트하다가, 폴더 리스트를 약 60회 정도 뛰우면 멈추는 현상이 발생되었다.

아마 메모리 누수(Memory Leak)때문이라고 판단한 난, 온갖 뻘짓을 하며 버그를 때려잡으려고 했다.

이거 갖고 씨름하기를 하루... VC로 포팅해서 테스트 해보자고 판단...

sceIoOpen, sceIoClose, sceIoRead, sceIoLseek32 등의 함수를 각각

fopen, fclose, fread, fseek 으로 디파인 해주고 (#define) 컴파일을 했는데

아뿔싸 글쎄 sceIoDclose 가 선언이 안되었다는 것이다.

자세히 보니 sceIoOpen으로 열어준 걸 sceIoDclose로 닫아준 것이다. -_-;;

결국 sceIoClose 로 다시 닫아주니 버그는 말끔히 해결! (고작 알파벳 하나 차이 때문에 ㅠ_ㅠ)

근데 왜 꼭 첫번째가 아니라 60회 정도했을때 멈추던 걸까? 알 수 없다.

버그는 진짜 사소한 코드 하나씩 때문에 발생하는 것 같다.

Posted by 키네낵