Linux Compat and some updated PARANOIA code

This was SVN commit r1189.
This commit is contained in:
Simon Brenner 2004-09-22 15:20:58 +00:00
parent ab7b542c20
commit df1b502bbd
8 changed files with 70 additions and 36 deletions

View File

@ -21,6 +21,7 @@ gee@pyro.nu
//--------------------------------------------------------
// Includes / Compiler directives
//--------------------------------------------------------
#include <list>
//--------------------------------------------------------
// Declarations

View File

@ -546,7 +546,7 @@ int file_start_io(File* const f, const off_t ofs, size_t size, void* const p, Fi
memset(io, 0, sizeof(FileIO));
#ifdef PARANOIA
debug_out("file_start_io ofs=%d size=%d\n", ofs, size);
debug_out("file_start_io: ofs=%d size=%d\n", ofs, size);
#endif
@ -584,6 +584,7 @@ int file_start_io(File* const f, const off_t ofs, size_t size, void* const p, Fi
// pointer to a struct containing the aiocb*.
aiocb* cb = (aiocb*)malloc(sizeof(aiocb));
memset(cb, 0, sizeof(aiocb));
if(!cb)
return ERR_NO_MEM;
io->cb = cb;
@ -594,9 +595,15 @@ int file_start_io(File* const f, const off_t ofs, size_t size, void* const p, Fi
cb->aio_fildes = f->fd;
cb->aio_offset = ofs;
cb->aio_nbytes = size;
#ifdef PARANOIA
debug_out("file_start_io: io=%p nbytes=%d\n", io, cb->aio_nbytes);
#endif
int err = lio_listio(LIO_NOWAIT, &cb, 1, (struct sigevent*)0);
if(err < 0)
{
#ifdef PARANOIA
debug_out("file_start_io: lio_listio: %d, %d[%s]\n", err, errno, strerror(errno));
#endif
file_discard_io(io);
return err;
}
@ -624,7 +631,7 @@ int file_io_complete(FileIO* io)
int file_wait_io(FileIO* io, void*& p, size_t& size)
{
#ifdef PARANOIA
debug_out("file_wait_io: hio=%I64x\n", hio);
debug_out("file_wait_io: hio=%p\n", io);
#endif
// zero output params in case something (e.g. H_DEREF) fails.
@ -640,6 +647,10 @@ debug_out("file_wait_io: hio=%I64x\n", hio);
// query number of bytes transferred (-1 if the transfer failed)
const ssize_t bytes_transferred = aio_return(cb);
#ifdef PARANOIA
debug_out("file_wait_io: bytes_transferred=%d aio_nbytes=%d\n",
bytes_transferred, cb->aio_nbytes);
#endif
if(bytes_transferred < (ssize_t)cb->aio_nbytes)
return -1;
@ -942,6 +953,9 @@ debug_out("file_io fd=%d size=%d ofs=%d\n", f->fd, data_size, data_ofs);
void* buf = (temp)? 0 : (char*)actual_buf + issue_cnt;
ssize_t issued = block_issue(f, slot, issue_ofs, buf);
#ifdef PARANOIA
debug_out("file_io: block_issue: %d\n", issued);
#endif
if(issued < 0)
err = issued;
// transfer failed - loop will now terminate after
@ -1031,6 +1045,10 @@ if(from_cache && !temp)
break;
}
#ifdef PARANOIA
debug_out("file_io: err=%d, actual_transferred_cnt=%d\n", err, actual_transferred_cnt);
#endif
// failed (0 means callback reports it's finished)
if(err < 0)
return err;

View File

@ -10,13 +10,16 @@
# include <AL/alut.h>
#endif
// Linux OpenAL puts the Ogg Vorbis extension enums in alexttypes.h
#ifdef OS_LINUX
# include <AL/alexttypes.h>
#endif
#ifdef _MSC_VER
#pragma comment(lib, "openal32.lib")
#pragma comment(lib, "alut.lib")
#endif
// called as late as possible, i.e. the first time sound/music is played
// (either from module init there, or from the play routine itself).
// this delays library load, leading to faster perceived app startup.
@ -319,7 +322,11 @@ static int ALBuffer_reload(ALBuffer* b, const char* fn, Handle)
// freed in bailout ladder
Handle hf = 0;
ssize_t file_size = 0;
void* file = 0;
ssize_t bytes_read=0;
void *dst=0;
{
@ -372,13 +379,13 @@ static int ALBuffer_reload(ALBuffer* b, const char* fn, Handle)
// note: freed after openal latches its contents in al_create_buffer.
// we don't know how much has already been read by wav_detect_format;
// allocate enough for the entire file.
ssize_t file_size = vfs_size(hf);
file_size = vfs_size(hf);
if(file_size < 0)
{
ret = file_size;
goto fail;
}
void* file = mem_alloc(file_size, 65536); // freed soon after
file = mem_alloc(file_size, 65536); // freed soon after
if(!file)
{
ret = ERR_NO_MEM;
@ -389,8 +396,8 @@ memset(file, 0xe2, file_size);
// read from file. note: don't use vfs_load - detect_audio_fmt
// has seeked to the actual audio data in the file.
void* dst = file; // for vfs_io
ssize_t bytes_read = vfs_io(hf, file_size, &dst);
dst = file; // for vfs_io
bytes_read = vfs_io(hf, file_size, &dst);
if(bytes_read < 0)
{
ret = bytes_read;

View File

@ -1317,7 +1317,7 @@ Handle vfs_open(const char* v_fn, uint file_flags /* = 0 */)
// pass file flags to init
#ifdef PARANOIA
debug_out("vfs_open fn=%s %I64x\n", v_fn, h);
debug_out("vfs_open fn=%s %llx\n", v_fn, h);
#endif
return h;
@ -1325,10 +1325,10 @@ debug_out("vfs_open fn=%s %I64x\n", v_fn, h);
// close the handle to a file.
inline int vfs_close(Handle& h)
int vfs_close(Handle& h)
{
#ifdef PARANOIA
debug_out("vfs_close %I64x\n", h);
debug_out("vfs_close %llx\n", h);
#endif
return h_free(h, H_VFile);
@ -1426,7 +1426,7 @@ static ssize_t vfs_timed_io(const Handle hf, const size_t size, void** p, FileIO
Handle vfs_load(const char* const v_fn, void*& p, size_t& size, uint flags /* default 0 */)
{
#ifdef PARANOIA
debug_out("vfs_load fn=%s\n", fn);
debug_out("vfs_load v_fn=%s\n", v_fn);
#endif
p = 0; size = 0; // zeroed in case vfs_open or H_DEREF fails
@ -1457,24 +1457,27 @@ debug_out("vfs_load fn=%s\n", fn);
// (padding), but it greatly simplifies returning the Handle
// (if we allow File to alloc, have to make sure the Handle references
// the actual data address, not that of the padding).
const size_t BLOCK_SIZE = 64*KB;
p = mem_alloc(size, BLOCK_SIZE, 0, &hm);
if(!p)
goto ret;
ssize_t nread = vfs_timed_io(hf, size, &p);
// failed
if(nread < 0)
{
mem_free_h(hm);
hm = nread; // error code
}
else
{
if(flags & FILE_CACHE)
vf->hm = hm;
const size_t BLOCK_SIZE = 64*KB;
p = mem_alloc(size, BLOCK_SIZE, 0, &hm);
if(!p)
goto ret;
}
{
ssize_t nread = vfs_timed_io(hf, size, &p);
// failed
if(nread < 0)
{
mem_free_h(hm);
hm = nread; // error code
}
else
{
if(flags & FILE_CACHE)
vf->hm = hm;
}
}
ret:
vfs_close(hf);
@ -1485,6 +1488,9 @@ ret:
if(hm <= 0)
p = 0, size = 0;
if (hm == 0)
debug_out("hm == 0!!\n");
return hm;
}
@ -1573,7 +1579,7 @@ Handle vfs_start_io(Handle hf, off_t ofs, size_t size, void* buf)
// indicates if the IO referenced by <io> has completed.
// return value: 0 if pending, 1 if complete, < 0 on error.
inline int vfs_io_complete(Handle hio)
int vfs_io_complete(Handle hio)
{
H_DEREF(hio, IO, io);
if(io->is_zip)
@ -1585,7 +1591,7 @@ inline int vfs_io_complete(Handle hio)
// wait until the transfer <hio> completes, and return its buffer.
// output parameters are zeroed on error.
inline int vfs_wait_io(Handle hio, void*& p, size_t& size)
int vfs_wait_io(Handle hio, void*& p, size_t& size)
{
H_DEREF(hio, IO, io);
if(io->is_zip)
@ -1596,7 +1602,7 @@ inline int vfs_wait_io(Handle hio, void*& p, size_t& size)
// finished with transfer <hio> - free its buffer (returned by vfs_wait_io)
inline int vfs_discard_io(Handle& hio)
int vfs_discard_io(Handle& hio)
{
return h_free(hio, H_IO);
}

View File

@ -1068,7 +1068,7 @@ int zip_start_io(ZFile* const zf, off_t user_ofs, size_t max_output_size, void*
// indicates if the IO referenced by <io> has completed.
// return value: 0 if pending, 1 if complete, < 0 on error.
inline int zip_io_complete(ZipIO* io)
int zip_io_complete(ZipIO* io)
{
if(io->already_inflated)
return 1;
@ -1078,7 +1078,7 @@ inline int zip_io_complete(ZipIO* io)
// wait until the transfer <io> completes, and return its buffer.
// output parameters are zeroed on error.
inline int zip_wait_io(ZipIO* io, void*& buf, size_t& size)
int zip_wait_io(ZipIO* io, void*& buf, size_t& size)
{
buf = io->user_buf;
size = io->max_output_size;
@ -1107,7 +1107,7 @@ inline int zip_wait_io(ZipIO* io, void*& buf, size_t& size)
// finished with transfer <io> - free its buffer (returned by zip_wait_io)
inline int zip_discard_io(ZipIO* io)
int zip_discard_io(ZipIO* io)
{
if(io->already_inflated)
return 0;

View File

@ -36,7 +36,7 @@ void debug_out(const char* fmt, ...)
}
inline void debug_check_heap()
void debug_check_heap()
{
}

View File

@ -397,7 +397,7 @@ JSBool getLanguageID(JSContext* cx, JSObject* UNUSEDPARAM(globalObject), unsigne
return JS_TRUE;
}
extern "C" extern int fps;
extern "C" int fps;
JSBool getFPS(JSContext* UNUSEDPARAM(cx), JSObject* UNUSEDPARAM(globalObject), unsigned int UNUSEDPARAM(argc), jsval* UNUSEDPARAM(argv), jsval* rval)
{
*rval = INT_TO_JSVAL(fps);

View File

@ -322,7 +322,9 @@ CStrW ScriptingHost::ValueToUCString( const jsval value )
if (string == NULL)
throw PSERROR_Scripting_ConversionFailed();
return CStrW(JS_GetStringChars(string), JS_GetStringLength(string));
jschar *strptr=JS_GetStringChars(string);
uint length=JS_GetStringLength(string);
return CStrW(std::wstring(strptr, strptr+length));
}
jsval ScriptingHost::UCStringToValue(const utf16string &str)