| |
| |
| |
| |
| |
| |
| #include <psxtypes/psxtypes.h> |
| #include <ntapi/nt_port.h> |
| #include <ntapi/nt_vmount.h> |
| #include <ntapi/ntapi.h> |
| #include "ntapi_impl.h" |
| |
| |
| nt_vms_node * __stdcall __ntapi_vms_get_end_component_first_node( |
| __in nt_vms_system * pvms_sys, |
| __in uint32_t end_component_hash) |
| { |
| nt_vms_node * node; |
| |
| |
| if (!pvms_sys->dev_name_head_node || !end_component_hash) |
| return (nt_vms_node *)0; |
| |
| |
| node = (nt_vms_node *)((uintptr_t)pvms_sys + pvms_sys->end_component_head_node); |
| |
| while (node->next && (node->end_component_hash < end_component_hash)) |
| node = (nt_vms_node *)((uintptr_t)pvms_sys + node->next); |
| |
| if (node->end_component_hash == end_component_hash) |
| return node; |
| else |
| return (nt_vms_node *)0; |
| } |
| |
| |
| static nt_vms_node * __stdcall __ntapi_vms_get_node( |
| __in nt_vms_system * pvms_sys, |
| __in uint32_t end_component_hash, |
| __in uint32_t dev_name_hash, |
| __in nt_large_integer index_number) |
| { |
| nt_vms_node * node; |
| |
| |
| if (!pvms_sys->dev_name_head_node) |
| return (nt_vms_node *)0; |
| |
| |
| if (end_component_hash) { |
| node = (nt_vms_node *)((uintptr_t)pvms_sys + pvms_sys->end_component_head_node); |
| |
| while (node->next && (node->end_component_hash < end_component_hash)) |
| node = (nt_vms_node *)((uintptr_t)pvms_sys + node->next); |
| |
| if (node->end_component_hash != end_component_hash) |
| return (nt_vms_node *)0; |
| } else |
| node = (nt_vms_node *)((uintptr_t)pvms_sys + pvms_sys->dev_name_head_node); |
| |
| |
| while (node->next && (node->dev_name_hash < dev_name_hash)) |
| node = (nt_vms_node *)((uintptr_t)pvms_sys + node->next); |
| |
| if (node->dev_name_hash != dev_name_hash) |
| return (nt_vms_node *)0; |
| |
| |
| while (node->next && (node->index_number.quad < index_number.quad)) |
| node = (nt_vms_node *)((uintptr_t)pvms_sys + node->next); |
| |
| if (node->index_number.quad != index_number.quad) |
| return (nt_vms_node *)0; |
| |
| return node; |
| } |
| |
| |
| nt_vms_node * __stdcall __ntapi_vms_get_node_by_dev_name( |
| __in nt_vms_system * pvms_sys, |
| __in uint32_t dev_name_hash, |
| __in nt_large_integer index_number) |
| { |
| return __ntapi_vms_get_node( |
| pvms_sys, |
| 0, |
| dev_name_hash, |
| index_number); |
| } |
| |
| |
| nt_vms_node * __stdcall __ntapi_vms_get_node_by_end_component( |
| __in nt_vms_system * pvms_sys, |
| __in uint32_t end_component_hash, |
| __in uint32_t dev_name_hash, |
| __in nt_large_integer index_number) |
| { |
| return __ntapi_vms_get_node( |
| pvms_sys, |
| end_component_hash, |
| dev_name_hash, |
| index_number); |
| } |
| |
| |
| nt_vms_point * __stdcall __ntapi_vms_get_top_of_stack_mount_point( |
| __in nt_vms_system * pvms_sys, |
| __in nt_vms_node * node) |
| { |
| nt_vms_point * point; |
| |
| point = (nt_vms_point *)((uintptr_t)pvms_sys + node->stack); |
| |
| while (point->next) |
| point = (nt_vms_point *)((uintptr_t)pvms_sys + point->next); |
| |
| return point; |
| } |