亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? iin_net.cpp

?? PS2游戲硬盤直灌(HDL)的Windows下VC的源代碼
?? CPP
字號:
/* * iin_net.c, based on iin_hdloader.c, v 1.1 * $Id: iin_net.c,v 1.4 2004/12/04 10:20:52 b081 Exp $ * * Copyright 2004 Bobi B., w1zard0f07@yahoo.com * * This file is part of hdl_dump. * * hdl_dump is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * hdl_dump is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with hdl_dump; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <ctype.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include "iin_net.h"#include "osal.h"#include "retcodes.h"#include "aligned.h"#include "apa.h"#include "hio_net.h"#include "net_io.h"#define _MB * (1024 * 1024) /* really ugly :-) */typedef struct hdl_part_type{  u_int32_t start_s, length_s; /* in 512-byte long sectors, relative to the RAW HDD */  u_int64_t offset; /* in bytes, relative to CD start */} hdl_part_t;typedef struct iin_net_type{  iin_t iin;  hio_t *hio; /* hio_net_t, actually */  char *unaligned, *buffer;  u_int32_t num_parts;  hdl_part_t *parts;  const hdl_part_t *last_part; /* the last partition where requested sectors were */} iin_net_t;/**************************************************************/static intnet_stat (iin_t *iin,	  u_int32_t *sector_size,	  u_int32_t *num_sectors){  iin_net_t *net = (iin_net_t*) iin;  u_int64_t total_size = 0;  u_int32_t i;  for (i=0; i<net->num_parts; ++i)    total_size += (u_int64_t) net->parts [i].length_s * HDD_SECTOR_SIZE;  *sector_size = IIN_SECTOR_SIZE;  *num_sectors = (u_int32_t) (total_size / IIN_SECTOR_SIZE);  return (OSAL_OK);}/**************************************************************/static intnet_read (iin_t *iin,	  u_int32_t start_sector,	  u_int32_t num_sectors,	  const char **data,	  u_int32_t *length){  int result;  iin_net_t *net = (iin_net_t*) iin;  u_int64_t start_offset = (u_int64_t) start_sector * IIN_SECTOR_SIZE;  u_int64_t abs_offset, bytes_til_part_end;  u_int32_t data_len;  /* find the partition where requested sectors are */  if (net->last_part->offset <= start_offset &&      start_offset < net->last_part->offset + (u_int64_t)net->last_part->length_s * HDD_SECTOR_SIZE)    ; /* same partition as the last time */  else    { /* make a linear scan to locate the partition */      int found = 0;      u_int32_t i;      for (i=0; i<net->num_parts; ++i)	{	  const hdl_part_t *part = net->parts + i;	  if (part->offset <= start_offset &&	      start_offset < part->offset + (u_int64_t) part->length_s * HDD_SECTOR_SIZE)	    { /* found */	      net->last_part = part;	      found = 1;	      break;	    }	}      if (!found)	{	  *length = 0; /* should be behind end-of-file? */	  return (OSAL_OK);	}    }  abs_offset = ((u_int64_t) net->last_part->start_s * HDD_SECTOR_SIZE +		start_offset - net->last_part->offset);  bytes_til_part_end = ((u_int64_t) net->last_part->length_s * HDD_SECTOR_SIZE -			(start_offset - net->last_part->offset));  data_len = num_sectors * IIN_SECTOR_SIZE;  if (data_len > bytes_til_part_end)    data_len = (u_int32_t) bytes_til_part_end;  result = (unsigned long)net->hio->read (net->hio, (unsigned long)abs_offset / HDD_SECTOR_SIZE, data_len / HDD_SECTOR_SIZE,			   net->buffer, length);  if (result == RET_OK)    *data = net->buffer;  return (result);}/**************************************************************/static intnet_close (iin_t *iin){  iin_net_t *net = (iin_net_t*) iin;  osal_free (net->parts);  osal_free (net->unaligned);  net->hio->close (net->hio);  osal_free (net);  return (RET_OK);}/**************************************************************/static char*net_last_error (iin_t *iin){  iin_net_t *net = (iin_net_t*) iin;  return (net->hio->last_error (net->hio));}/**************************************************************/static voidnet_dispose_error (iin_t *iin,		   char* error){  iin_net_t *net = (iin_net_t*) iin;  net->hio->dispose_error (net->hio, error);}/**************************************************************/static iin_net_t*net_alloc (hio_t *hio,	   u_int32_t num_parts,	   const hdl_part_t *parts){  iin_net_t *net = (iin_net_t *)osal_alloc (sizeof (iin_net_t));  if (net != NULL)    {      iin_t *iin = &net->iin;      hdl_part_t *parts2 = (hdl_part_t *)osal_alloc (sizeof (hdl_part_t) * num_parts);      char *buffer = (char *)osal_alloc (IIN_SECTOR_SIZE * IIN_NUM_SECTORS + HDD_SECTOR_SIZE);      if (parts2 != NULL && buffer != NULL)	{ /* success */	  u_int32_t i;	  memset (net, 0, sizeof (iin_net_t));	  iin->stat = &net_stat;	  iin->read = &net_read;	  iin->close = &net_close;	  iin->last_error = &net_last_error;	  iin->dispose_error = &net_dispose_error;	  strcpy (iin->source_type, "HD Loader partition via TCP/IP");	  net->hio = hio;	  net->unaligned = buffer;	  net->buffer = (char *)(void*) (((long) buffer + HDD_SECTOR_SIZE - 1) & ~(HDD_SECTOR_SIZE - 1));	  net->num_parts = num_parts;	  net->parts = parts2;	  for (i=0; i<num_parts; ++i)	    net->parts [i] = parts [i];	  net->last_part = net->parts;	}      else	{ /* failed */	  if (parts2 != NULL)	    osal_free (parts2);	  if (buffer != NULL)	    osal_free (buffer);	  osal_free (net);	  net = NULL;	}    }  return (net);}/**************************************************************/intiin_net_probe_path (const char *path,		    iin_t **iin){  int result = RET_NOT_COMPAT;  char *endp;  int a, b, c, d;  char ip_addr_only [16];  a = strtol (path, &endp, 10);  if (a > 0 && a <= 255 && *endp == '.')    { /* there is a chance */      b = strtol (endp + 1, &endp, 10);      if (b >= 0 && b <= 255 && *endp == '.')	{	  c = strtol (endp + 1, &endp, 10);	  if (c >= 0 && c <= 255 && *endp == '.')	    {	      d = strtol (endp + 1, &endp, 10);	      if (d >= 0 && d <= 255 && *endp == ':' && endp - path <= 15)		/* that could be an IP address */		result = RET_OK;	    }	}    }  if (result == RET_OK)    {      hio_t *hio;      memcpy (ip_addr_only, path, endp - path);      ip_addr_only [endp - path] = '\0';      result = hio_net_probe (ip_addr_only, &hio);      if (result == OSAL_OK)	{	  const char *partition_name = strchr (path, ':') + 1;	  apa_partition_table_t *table = NULL;	  u_int32_t partition_index;	  result = apa_ptable_read_ex (hio, &table);	  if (result == OSAL_OK)	    {	      result = apa_find_partition (table, partition_name, &partition_index);	      if (result == RET_NOT_FOUND)		{ /* attempt to locate partition name by prepending "PP.HDL." */		  char alt_part_name [100];		  sprintf (alt_part_name, "PP.HDL.%s", partition_name);		  result = apa_find_partition (table, alt_part_name, &partition_index);		}	    }	  if (result == OSAL_OK)	    { /* partition is found - read structure */	      unsigned char *buffer = (unsigned char *)osal_alloc (4 _MB);	      if (buffer != NULL)		{ /* get HD Loader header */		  u_int32_t len;		  const ps2_partition_header_t *part = &table->parts [partition_index].header;		  result = hio->read (hio, part->start, (4 _MB) / HDD_SECTOR_SIZE, buffer, &len);		  if (result == OSAL_OK)		    result = (len == 4 _MB ? OSAL_OK : RET_BAD_APA); /* read failed? */		  if (result == OSAL_OK)		    result = (buffer [0x00101000] == 0xed &&			      buffer [0x00101001] == 0xfe &&			      buffer [0x00101002] == 0xad &&			      buffer [0x00101003] == 0xde) ? OSAL_OK : RET_NOT_HDL_PART;		  if (result == OSAL_OK)		    { /* that is a HD Loader partition */		      u_int32_t num_parts = buffer [0x001010f0];		      hdl_part_t *parts = (hdl_part_t *)osal_alloc (sizeof (hdl_part_t) * num_parts);		      if (parts != NULL)			{			  u_int64_t offset = 0;			  const u_int32_t *data = (u_int32_t*) (buffer + 0x001010f5);			  u_int32_t i;			  for (i=0; i<num_parts; ++i)			    {			      parts [i].offset = offset;			      parts [i].start_s = data [i * 3 + 1] << 8;			      parts [i].length_s = data [i * 3 + 2] / 2;			      offset += (u_int64_t) parts [i].length_s * HDD_SECTOR_SIZE;			    }			  *iin = (iin_t*) net_alloc (hio, num_parts, parts);			  osal_free (parts);			  if (*iin != NULL)			    { /* success */			      result = RET_OK;			    }			  else			    { /* error */			      hio->close (hio);			      result = RET_NO_MEM;			    }			}		      else			result = RET_NO_MEM;		    }		  osal_free (buffer);		}	      else		result = RET_NO_MEM;	    }	} /* hio ok? */    }  return (result);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频在线一区二区三区| www.亚洲色图| 亚洲影视在线观看| 一区免费观看视频| 成人免费一区二区三区在线观看| 久久亚洲春色中文字幕久久久| 亚洲一本大道在线| 一区二区三区四区中文字幕| 亚洲精品欧美激情| 亚洲一区二区影院| 亚洲狼人国产精品| 亚洲成人精品一区二区| 人人狠狠综合久久亚洲| 亚洲高清久久久| 青青草国产成人av片免费| 久久成人久久爱| 成人一区二区视频| 欧美午夜在线观看| 日韩欧美高清dvd碟片| 久久久久国产精品麻豆| 国产精品初高中害羞小美女文| 欧美在线观看视频一区二区三区| 轻轻草成人在线| 美女视频网站久久| 国产精品2024| 91久久精品一区二区| 欧美狂野另类xxxxoooo| 久久综合久久久久88| 国产精品嫩草99a| 午夜精品一区二区三区免费视频| 国产精品人成在线观看免费| 一区二区三区国产精华| 精品中文字幕一区二区| 粉嫩嫩av羞羞动漫久久久 | 成人午夜av影视| 色悠悠久久综合| 精品国产精品一区二区夜夜嗨| 色呦呦网站一区| 精品人伦一区二区色婷婷| 亚洲色图丝袜美腿| 激情综合五月婷婷| 色综合久久99| 欧美xxxx在线观看| 亚洲精品久久7777| 国内精品免费**视频| 在线观看视频一区二区| 久久精品视频网| 亚洲小说春色综合另类电影| 狠狠色狠狠色综合日日91app| 麻豆中文一区二区| 99国产精品久久久久久久久久久| 久久99久久精品欧美| 色老头久久综合| 亚洲国产高清在线观看视频| 久久精品国产亚洲5555| 欧美精品色一区二区三区| 国产精品不卡视频| 国产一区二区免费视频| 欧美一区二区三区的| 一区二区三区在线高清| 成人污污视频在线观看| 久久久久久久久久久久久女国产乱| 欧美一级久久久| 亚洲精品国产一区二区三区四区在线| 国产精品蜜臀av| 国产精品一卡二| 欧美精品一区二区三| 麻豆精品蜜桃视频网站| 欧美日韩一区二区三区在线| 亚洲精品美腿丝袜| 91丨九色丨尤物| 亚洲女与黑人做爰| 91小视频在线观看| 亚洲美女一区二区三区| 91亚洲永久精品| 亚洲精品成人精品456| 94-欧美-setu| 中文字幕日韩欧美一区二区三区| 亚洲视频免费在线| 91免费视频网址| 亚洲激情欧美激情| 色94色欧美sute亚洲13| 亚洲一线二线三线视频| 欧美日韩三级一区| 玖玖九九国产精品| 欧美一二三区精品| 国产精品一品二品| 国产精品久久午夜| 在线亚洲+欧美+日本专区| 亚洲国产精品嫩草影院| 91麻豆精品国产91久久久更新时间| 久久综合狠狠综合久久激情| 国产精品亚洲一区二区三区在线| 99久久伊人精品| 亚洲精品中文在线影院| 欧美在线观看18| 久久国产乱子精品免费女| 久久精品在线免费观看| eeuss影院一区二区三区| 18成人在线观看| 欧美肥妇毛茸茸| 国产精品中文字幕日韩精品| 综合网在线视频| 日韩欧美久久久| 91尤物视频在线观看| 美女被吸乳得到大胸91| 亚洲图片你懂的| 日韩欧美国产一区在线观看| 高清不卡一区二区在线| 午夜精品久久久久久久99水蜜桃| 91丨九色丨国产丨porny| 亚洲国产乱码最新视频| 26uuu色噜噜精品一区二区| 91丨porny丨在线| 精品制服美女丁香| 亚洲精品欧美激情| 国产欧美一二三区| 欧美伊人久久久久久久久影院| 国产精品毛片a∨一区二区三区| 美女视频免费一区| 亚洲精品伦理在线| 久久精品在这里| 日韩一二三区视频| 日本高清免费不卡视频| 国产一区二区三区免费| 亚洲成a人片综合在线| 国产欧美一区视频| 日韩一级完整毛片| 欧美性生活一区| av在线一区二区三区| 国精产品一区一区三区mba桃花| 欧美一区二区三区男人的天堂 | 粉嫩在线一区二区三区视频| 亚洲蜜臀av乱码久久精品| 欧美tickling挠脚心丨vk| 欧美在线你懂的| 99久久精品国产观看| 顶级嫩模精品视频在线看| 韩国v欧美v亚洲v日本v| 美女诱惑一区二区| 日韩精品免费专区| 亚洲va欧美va人人爽| 亚洲国产欧美在线| 亚洲一级二级三级在线免费观看| 欧美日韩国产成人在线91| 91视频观看视频| 99久久免费精品高清特色大片| 亚洲视频 欧洲视频| 久久久久97国产精华液好用吗| 懂色av一区二区三区蜜臀| 国产伦精品一区二区三区在线观看| 久久久不卡影院| 国产亚洲综合在线| 国产亚洲短视频| 日本一区二区动态图| 中文字幕在线不卡| 中文字幕中文字幕一区| 一区二区中文字幕在线| 综合久久国产九一剧情麻豆| 亚洲色图在线播放| 亚洲国产日韩精品| 日本欧美一区二区三区乱码| 久久99久久99小草精品免视看| 综合激情成人伊人| 最新久久zyz资源站| 一区二区三区在线播| 亚洲成人三级小说| 丝袜亚洲精品中文字幕一区| 日本成人在线不卡视频| 狠狠色丁香九九婷婷综合五月| 亚洲人成电影网站色mp4| 亚洲夂夂婷婷色拍ww47| 日本不卡在线视频| 精品无人区卡一卡二卡三乱码免费卡 | 久久亚洲精品国产精品紫薇| 欧美国产成人在线| 一区二区三区四区在线播放| 日韩综合一区二区| 国产成人自拍网| 欧美日韩一区二区在线视频| 亚洲天堂免费看| 午夜精品一区在线观看| 国产一区视频在线看| 99久久99久久精品免费观看 | 麻豆精品一区二区av白丝在线| 欧美韩国日本不卡| 一区二区免费视频| 国产在线播精品第三| 色偷偷一区二区三区| 91精品国产一区二区| 久久精品人人爽人人爽| 亚洲在线免费播放| 国产一区二区三区不卡在线观看 | 日韩视频在线你懂得| 亚洲同性gay激情无套| 久久精品国产一区二区三| 成人午夜电影久久影院| 日韩一区二区三| 亚洲乱码中文字幕| 国产精品69久久久久水密桃|