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

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

?? iin_img_base.cpp

?? PS2游戲硬盤直灌(HDL)的Windows下VC的源代碼
?? CPP
字號:
/* * iin_img_base.c * $Id: iin_img_base.c,v 1.7 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 <assert.h>#include <ctype.h>#include <string.h>#include "iin_img_base.h"#include "osal.h"#include "retcodes.h"#include "aligned.h"#include "common.h"#define PARTS_GROW 64typedef struct part_type{  u_int32_t offset_s, length_s; /* in IIN_SECTOR_SIZE-based sectors */  u_int64_t skip; /* number of bytes to skip at the begining of the input (header?) */  char *input_path;  u_int32_t device_sector_size; /* sector size of the device where the input is located */} part_t;struct iin_img_base_type{  iin_t iin;  part_t *current; /* where "file" and "al" currently are */  osal_handle_t file;  aligned_t *al;  char *unaligned, *buffer;  u_int32_t raw_sector_size, raw_skip_offset;  u_int32_t offset_s;  u_int32_t num_parts, alloc_parts;  part_t *parts;  unsigned long error_code; /* against osal_... */};/**************************************************************/static voidclose_current (iin_img_base_t *img_base){  if (img_base->current != NULL)    { /* close the old input */      al_free (img_base->al);      osal_close (img_base->file);      img_base->current = NULL;    }}/**************************************************************/intimg_base_add_part (iin_img_base_t *img_base,		   const char *input_path,		   u_int32_t length_s,		   u_int64_t skip,		   u_int32_t device_sector_size){  part_t *prev, *dest;  u_int32_t len;  if (img_base->num_parts == img_base->alloc_parts)    { /* (re)alloc memory */      u_int32_t bytes = (img_base->alloc_parts + PARTS_GROW) * sizeof (part_t);      part_t *tmp = (part_t*) osal_alloc (bytes);      if (tmp != NULL)	{	  memset (tmp, 0, bytes);	  if (img_base->parts != NULL)	    { /* move old data and release old buffer */	      memcpy (tmp, img_base->parts, img_base->num_parts * sizeof (part_t));	      osal_free (img_base->parts);	    }	  img_base->parts = tmp;	  img_base->alloc_parts += PARTS_GROW;	}      else	return (RET_NO_MEM);    }  prev = img_base->num_parts > 0 ? img_base->parts + img_base->num_parts - 1 : NULL;  dest = img_base->parts + img_base->num_parts;  dest->offset_s = img_base->offset_s;  dest->length_s = length_s;  dest->skip = skip;  len = strlen (input_path);  dest->input_path = (char *)osal_alloc (len + 1);  if (dest->input_path != NULL)    strcpy (dest->input_path, input_path);  else    return (RET_NO_MEM);  dest->device_sector_size = device_sector_size;  img_base->offset_s += length_s;  ++img_base->num_parts;  return (RET_OK);}/**************************************************************/voidimg_base_add_gap (iin_img_base_t *img_base,		  u_int32_t length_s){  img_base->offset_s += length_s;}/**************************************************************/static intimg_base_stat (iin_t *iin,	       u_int32_t *sector_size,	       u_int32_t *num_sectors){  iin_img_base_t *img_base = (iin_img_base_t*) iin;  *sector_size = IIN_SECTOR_SIZE;  if (img_base->num_parts > 0)    *num_sectors = (img_base->parts [img_base->num_parts - 1].offset_s +		    img_base->parts [img_base->num_parts - 1].length_s);  else    *num_sectors = 0; /* no parts set up */  return (OSAL_OK);}/**************************************************************/static intimg_base_read (iin_t *iin,	       u_int32_t start_sector,	       u_int32_t num_sectors,	       const char **data,	       u_int32_t *length){  iin_img_base_t *img_base = (iin_img_base_t*) iin;  int result = OSAL_OK;  if (img_base->current != NULL &&      img_base->current->offset_s <= start_sector &&      start_sector < img_base->current->offset_s + img_base->current->length_s)    ; /* current part contains (at least part of) the requested data */  else    { /* locate the part containing the requested data */      part_t *prev = NULL, *part;      int found = 0, gap = 0;      u_int32_t i;      for (i=0; i<img_base->num_parts; ++i)	{	  part = img_base->parts + i;	  if (part->offset_s <= start_sector &&	      start_sector < part->offset_s + part->length_s)	    { /* part found */	      found = 1; break;	    }	  else if (start_sector < part->offset_s)	    { /* a gap found */	      gap = 1; break;	    }	  prev = part;	}      if (found)	{	  if (img_base->current != NULL &&	      caseless_compare (img_base->current->input_path, part->input_path))	    img_base->current = part; /* do not reopen if new input is the same */	  else	    { /* open the new input */	      osal_handle_t in;	      u_int32_t cache_size =		((img_base->raw_sector_size * IIN_NUM_SECTORS + img_base->raw_sector_size - 1) /		 part->device_sector_size);	      result = osal_open (part->input_path, &in, 1); /* with no cache */	      if (result == OSAL_OK)		{		  aligned_t *al = al_alloc (in, part->device_sector_size, cache_size);		  if (al != NULL)		    { /* switch the old input with the new one */		      close_current (img_base);		      img_base->al = al;		      img_base->file = in;		      img_base->current = part;		    }		  else		    result = RET_NO_MEM;		  if (result != OSAL_OK)		    osal_close (in); /* al allocation failed? */		}	    }	}      else if (gap == 1)	{ /* a gap between "prev" and "part" */	  u_int32_t gap_start_s = prev != NULL ? prev->offset_s + prev->length_s : 0;	  u_int32_t gap_length_s = part->offset_s - gap_start_s;	  u_int32_t til_end_s = gap_start_s + gap_length_s - start_sector;	  *length = (num_sectors > til_end_s ? til_end_s : num_sectors) * IIN_SECTOR_SIZE;	  if (*length > IIN_NUM_SECTORS * IIN_SECTOR_SIZE)	    *length = IIN_NUM_SECTORS * IIN_SECTOR_SIZE;	  memset (img_base->buffer, 0, *length);	  *data = img_base->buffer;	  return (OSAL_OK);	}      else	{ /* behind the end-of-file */	  *length = 0;	  return (OSAL_OK);	}    }  if (result == OSAL_OK)    {      u_int64_t offset =	img_base->current->skip +	(u_int64_t) (start_sector - img_base->current->offset_s) * img_base->raw_sector_size;      u_int32_t len;      const char *raw_data;      int result = al_read (img_base->al, offset, &raw_data,			    num_sectors * img_base->raw_sector_size, &len);      if (result == OSAL_OK)	{	  u_int32_t num_sect = (len + img_base->raw_sector_size - 1) / img_base->raw_sector_size;	  u_int32_t uncomplete =	    (img_base->raw_sector_size - len % img_base->raw_sector_size) %	    img_base->raw_sector_size;	  if (start_sector + num_sectors > img_base->current->length_s)	    { /* check if read after the end has not been tried */	      u_int32_t sectors_til_end =		img_base->current->offset_s + img_base->current->length_s - start_sector;	      if (num_sect > sectors_til_end)		num_sect = sectors_til_end;	    }	  /* do not copy data if structure is 2048/plain (would safe some CPU) */	  if (img_base->raw_sector_size == IIN_SECTOR_SIZE &&	      img_base->raw_skip_offset == 0)	    *data = raw_data;	  else	    {	      u_int32_t i;	      for (i=0; i<num_sect; ++i)		memcpy (img_base->buffer + i * IIN_SECTOR_SIZE,			raw_data + i * img_base->raw_sector_size + img_base->raw_skip_offset,			IIN_SECTOR_SIZE);	      *data = img_base->buffer;	    }	  *length = num_sect * IIN_SECTOR_SIZE;	  if (uncomplete == 0)	    ;	  else	    { /* fill last sector with zeroes */	      if (uncomplete > img_base->raw_skip_offset)		{ /* last sector is incomplete */		  u_int32_t len_to_zero = uncomplete + img_base->raw_skip_offset;		  memset ((char*) *data + *length - len_to_zero, 0, len_to_zero);		}	      else		/* remove last sector at all; only header has been readen */		--(*length);	    }	}      else	img_base->error_code = osal_get_last_error_code ();    }  return (result);}/**************************************************************/static intimg_base_close (iin_t *iin){  iin_img_base_t *img_base = (iin_img_base_t*) iin;  u_int32_t i;  close_current (img_base);  osal_free (img_base->unaligned);  for (i=0; i<img_base->num_parts; ++i)    osal_free (img_base->parts [i].input_path);  osal_free (img_base->parts);  osal_free (iin);  return (OSAL_OK);}/**************************************************************/static char*img_base_last_error (iin_t *iin){  iin_img_base_t *img_base = (iin_img_base_t*) iin;  return (osal_get_error_msg (img_base->error_code));}/**************************************************************/static voidimg_base_dispose_error (iin_t *iin,			char* error){  osal_dispose_error_msg (error);}/**************************************************************/iin_img_base_t*img_base_alloc (u_int32_t raw_sector_size,		u_int32_t raw_skip_offset){  iin_img_base_t *img_base = (iin_img_base_t*) osal_alloc (sizeof (iin_img_base_t));  if (img_base != NULL)    {      iin_t *iin = &img_base->iin;      u_int32_t buffer_size = (IIN_NUM_SECTORS + 1) * IIN_SECTOR_SIZE;      char *buffer = (char *)osal_alloc (buffer_size);      if (buffer != NULL)	{ /* success */	  memset (img_base, 0, sizeof (iin_img_base_t));	  iin->stat = &img_base_stat;	  iin->read = &img_base_read;	  iin->close = &img_base_close;	  iin->last_error = &img_base_last_error;	  iin->dispose_error = &img_base_dispose_error;	  img_base->unaligned = buffer;	  img_base->buffer =	    (char *)(void*) (((unsigned long) buffer + IIN_SECTOR_SIZE - 1) & ~(IIN_SECTOR_SIZE - 1));	  assert (img_base->buffer >= img_base->unaligned);	  img_base->raw_sector_size = raw_sector_size;	  img_base->raw_skip_offset = raw_skip_offset;	}      else	{ /* failed */	  osal_free (img_base);	  img_base = NULL;	}    }  return (img_base);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品国产一区二区4080| 日韩视频一区二区三区在线播放| 2欧美一区二区三区在线观看视频| 久久色中文字幕| 伊人一区二区三区| 国产精品88av| 91精品麻豆日日躁夜夜躁| 国产精品久久久久久福利一牛影视| 日韩电影在线看| 色综合久久久久综合体| 国产婷婷一区二区| 精品综合久久久久久8888| 91久久一区二区| 国产精品理论在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 精品视频123区在线观看| 国产精品久久久久久福利一牛影视 | 欧美婷婷六月丁香综合色| 欧美国产乱子伦| 韩国精品在线观看| 日韩一区二区三区av| 亚洲第一二三四区| 欧美亚洲动漫制服丝袜| 国产精品福利av| www.亚洲色图.com| 国产精品久线观看视频| 国产成人高清在线| 欧美国产精品中文字幕| 国产精品原创巨作av| 欧美tickling网站挠脚心| 日本一道高清亚洲日美韩| 欧美日韩精品三区| 视频一区在线播放| 制服.丝袜.亚洲.中文.综合| 五月天久久比比资源色| 欧美电影一区二区三区| 亚洲成av人片| 日韩一区二区三区在线| 麻豆国产精品视频| 久久夜色精品国产欧美乱极品| 美女视频黄久久| 国产喂奶挤奶一区二区三区| 国产成人精品在线看| 中文字幕一区在线观看| 在线亚洲精品福利网址导航| 亚洲综合久久久久| 91精品久久久久久久99蜜桃| 老鸭窝一区二区久久精品| 久久久久久久久久久电影| 成人国产免费视频| 麻豆精品一区二区| 国产欧美一区二区精品性色| 成人av网址在线| 亚洲国产一区二区三区| 欧美电视剧免费观看| 国产成人一级电影| 伊人开心综合网| 日韩视频在线一区二区| 成人a级免费电影| 亚洲午夜在线电影| 久久午夜国产精品| 色先锋久久av资源部| 蜜桃传媒麻豆第一区在线观看| 精品国产乱码久久久久久影片| 成人综合在线观看| 亚洲欧美精品午睡沙发| 日韩欧美黄色影院| 国产99久久精品| 午夜精品123| 欧美经典一区二区| 欧美日韩亚洲不卡| 丁香亚洲综合激情啪啪综合| 亚洲一区在线视频观看| 久久久五月婷婷| 日本韩国欧美国产| 国产精品一区免费视频| 国产精品久久久久久户外露出| 欧美剧情电影在线观看完整版免费励志电影| 麻豆国产一区二区| 一个色在线综合| 国产女同性恋一区二区| 91精品国产日韩91久久久久久| 成人午夜视频在线观看| 亚洲三级电影全部在线观看高清| 欧美日韩国产影片| jlzzjlzz欧美大全| 久久狠狠亚洲综合| 有码一区二区三区| 国产精品国产三级国产专播品爱网| 6080国产精品一区二区| 97超碰欧美中文字幕| 国产高清不卡一区二区| 日韩高清不卡在线| 亚洲午夜羞羞片| 亚洲欧洲日韩在线| 国产欧美综合在线| 精品国产网站在线观看| 4438亚洲最大| 色婷婷综合久久久久中文一区二区| 国产一区二区导航在线播放| 午夜电影久久久| 亚洲va欧美va人人爽| 亚洲欧洲av在线| 中文无字幕一区二区三区| 日韩欧美aaaaaa| 欧美电影免费观看高清完整版在线| 欧美日韩国产经典色站一区二区三区| 91丨九色丨尤物| 91香蕉国产在线观看软件| 粉嫩aⅴ一区二区三区四区五区| 韩国午夜理伦三级不卡影院| 蜜芽一区二区三区| 免费久久精品视频| 久久精品国产在热久久| 免费欧美在线视频| 麻豆一区二区99久久久久| 久久精品国产99国产精品| 久久不见久久见免费视频1| 精品一区二区三区免费视频| 精品中文字幕一区二区小辣椒 | 国产偷v国产偷v亚洲高清| 精品国产免费一区二区三区香蕉| 日韩视频永久免费| 久久久久亚洲蜜桃| 中文欧美字幕免费| 亚洲精品欧美激情| 一区二区三区高清在线| 亚洲永久免费视频| 视频一区二区欧美| 久久精品国产亚洲aⅴ| 国产一区二区在线影院| 国产91精品在线观看| aaa亚洲精品| 一本大道久久a久久综合婷婷| 欧美伊人久久久久久久久影院 | zzijzzij亚洲日本少妇熟睡| 色综合久久久网| 欧美一区二区三区精品| 久久免费的精品国产v∧| 国产精品毛片久久久久久久| 亚洲人123区| 美女视频黄久久| 成人免费高清视频在线观看| 91福利国产成人精品照片| 91精品国产高清一区二区三区蜜臀| 精品国精品自拍自在线| 亚洲色图一区二区| 日本人妖一区二区| eeuss鲁片一区二区三区在线看| 欧洲激情一区二区| 久久免费精品国产久精品久久久久| 日韩伦理av电影| 免费在线观看精品| 99re免费视频精品全部| 欧美一区二区三区免费| 亚洲人成精品久久久久| 久久成人18免费观看| 91极品美女在线| 国产日韩精品一区二区三区在线| 亚洲国产成人av网| 国产不卡在线一区| 欧美一区二区播放| 韩国av一区二区三区| 欧美日韩一区二区在线观看| 久久精品夜色噜噜亚洲aⅴ| 亚洲成人资源网| 99视频在线观看一区三区| 欧美大度的电影原声| 一区二区三区四区精品在线视频 | 亚洲国产三级在线| 成人免费精品视频| 日韩色视频在线观看| 一区二区在线免费| 99久久婷婷国产综合精品| 精品国产乱码久久久久久1区2区| 亚洲一区视频在线| 91污片在线观看| 国产精品久久久一本精品| 加勒比av一区二区| 51精品视频一区二区三区| 一区二区三区在线免费观看| 福利一区二区在线| 久久精品视频免费观看| 国产最新精品免费| 日韩视频国产视频| 全部av―极品视觉盛宴亚洲| 欧美性三三影院| 亚洲一区在线视频观看| 91看片淫黄大片一级| 亚洲欧洲一区二区三区| 成人午夜又粗又硬又大| 久久精品一区蜜桃臀影院| 国产中文一区二区三区| 91精品国产一区二区三区蜜臀| 亚洲国产成人高清精品| 欧美视频完全免费看| 亚洲一区二区免费视频| 欧美色涩在线第一页| 一区二区三区国产精华| 欧美日韩在线直播|