Пример #1
0
 size_t data_length() const noexcept {
   if (is_ext2())
       return __builtin_bswap64(*(uint64_t*) vla) & 0xffffffff;
   if (is_ext())
       return __builtin_bswap16(*(uint16_t*) vla);
   return payload();
 }
Пример #2
0
void filesys_init (bool format){
	fs_device = block_get_role(BLOCK_FILESYS);
	if(fs_device == NULL)
		PANIC("No file system device found, can't initialize file system.");

	if(is_ext2(fs_device) == false)
		PANIC("Device file system not recognised!");
	else {
		ext2_init();
		ext2_register(fs_device);
		printf("File system type: ext2.\n");
	}
}
Пример #3
0
    void set_payload(const size_t len)
    {
      uint16_t pbits = len;
      if      (len > 65535) pbits = 127;
      else if (len > 125)   pbits = 126;
      bits &= 0x80ff;
      bits |= (pbits & 0x7f) << 8;

      if (is_ext())
          *(uint16_t*) vla = __builtin_bswap16(len);
      else if (is_ext2())
          *(uint64_t*) vla = __builtin_bswap64(len);
      assert(data_length() == len);
    }
Пример #4
0
 size_t data_offset() const noexcept {
   size_t len = mask_length();
   if (is_ext2()) return len + 8;
   if (is_ext())  return len + 2;
   return len;
 }
Пример #5
0
int guess_filesystem(int start_session)
{
    int ret = 0;

    read_super(start_session);

#undef _DEBUG
#ifdef _DEBUG
    /* buffer is defined */
    if (is_cdi())     printf("CD-I, ");
    if (is_cd_rtos()) printf("CD-RTOS, ");
    if (is_isofs())   printf("ISOFS, ");
    if (is_hs())      printf("HS, ");
    if (is_bridge())  printf("BRIDGE, ");
    if (is_xa())      printf("XA, ");
    if (is_cdtv())    printf("CDTV, ");
    puts("");
#endif

    /* filesystem */
    if (is_cdi() && is_cd_rtos() && !is_bridge() && !is_xa()) {
        return FS_INTERACTIVE;
    } else {	/* read sector 0 ONLY, when NO greenbook CD-I !!!! */

        read_super2(start_session);

#ifdef _DEBUG
	/* buffer2 is defined */
	if (is_photocd()) printf("PHOTO CD, ");
	if (is_hfs()) printf("HFS, ");
	if (is_ext2()) printf("EXT2 FS, ");
	puts("");
#endif
        if (is_hs())
	    ret |= FS_HIGH_SIERRA;
	else if (is_isofs()) {
	    if (is_cd_rtos() && is_bridge())
	        ret = FS_ISO_9660_INTERACTIVE;
	    else if (is_hfs())
	        ret = FS_ISO_HFS;
	    else
	        ret = FS_ISO_9660;
	    isofs_size = get_size();

	    read_super4(start_session);

#ifdef _DEBUG
	    /* buffer4 is defined */
	    if (is_bootable()) printf("BOOTABLE, ");
	    puts("");
#endif
	    if (is_bootable())
		ret |= BOOTABLE;

	    if (is_bridge() && is_xa() && is_isofs() && is_cd_rtos()) {
	        read_super5(start_session);

#ifdef _DEBUG
		/* buffer5 is defined */
		if (is_video_cdi()) printf("VIDEO-CDI, ");
		puts("");
#endif
		if (is_video_cdi())
		    ret |= VIDEOCDI;
	    }
	} else if (is_hfs())
	    ret |= FS_HFS;
	else if (is_ext2())
	    ret |= FS_EXT2;
	else {

	    read_super3(start_session);

#ifdef _DEBUG
	    /* buffer3 is defined */
	    if (is_ufs()) printf("UFS, ");
	    puts("");
#endif
	    if (is_ufs())
	        ret |= FS_UFS;
	    else
	        ret |= FS_UNKNOWN;
	}
    }
    /* other checks */
    if (is_xa())
        ret |= XA;
    if (is_photocd())
	ret |= PHOTO_CD;
    if (is_cdtv())
	ret |= CDTV;
    return ret;
}