| |
| |
| |
| |
| |
| |
| #include <psxtypes/psxtypes.h> |
| #include <ntapi/nt_file.h> |
| #include <ntapi/ntapi.h> |
| #include "ntapi_impl.h" |
| |
| static inline int __ntapi_uintptr_to_utf8(uintptr_t value,unsigned char * buf) |
| { |
| int i,len; |
| uintptr_t val; |
| |
| if (!value) { |
| *buf = '0'; |
| len = 1; |
| } else { |
| for (len=0,val=value; val; val=val/10,len++); |
| for (i=len,buf+=len-1; i; i--,buf--,value=value/10) |
| *buf = '0' + (value % 10); |
| } |
| |
| return len; |
| } |
| |
| static inline ssize_t __ntapi_log_write(void * msg,uint32_t size) |
| { |
| int32_t status; |
| void * hlog; |
| nt_iosb iosb; |
| uintptr_t buffer[8] = {0}; |
| unsigned char * ch = (unsigned char *)buffer; |
| |
| if (!(hlog = __ntapi_internals()->rtdata->hlog)) |
| return NT_STATUS_INVALID_HANDLE; |
| |
| *ch++ = '@'; |
| ch += __ntapi_uintptr_to_utf8( |
| pe_get_current_process_id(), |
| ch); |
| *ch++ = ':'; |
| ch += __ntapi_uintptr_to_utf8( |
| pe_get_current_thread_id(), |
| ch); |
| *ch++ = '@'; |
| *ch++ = ' '; |
| |
| __ntapi->zw_write_file( |
| hlog, |
| 0,0,0,&iosb, |
| buffer, |
| (uint32_t)(ch-(unsigned char *)buffer), |
| 0,0); |
| |
| status = __ntapi->zw_write_file( |
| hlog, |
| 0,0,0,&iosb, |
| msg, |
| (uint32_t)size, |
| 0,0); |
| |
| return status ? -1 : iosb.info; |
| } |