Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ add_library(ccos_api STATIC
${SOURCE_DIR}/string_utils.c
${SOURCE_DIR}/common.h
${SOURCE_DIR}/common.c
${SOURCE_DIR}/ccos_disk.h
${SOURCE_DIR}/ccos_image.h
${SOURCE_DIR}/ccos_image.c
${SOURCE_DIR}/ccos_boot_data.h
Expand Down
23 changes: 0 additions & 23 deletions ccos_context.h

This file was deleted.

15 changes: 15 additions & 0 deletions ccos_disk.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#ifndef CCOS_CONTEXT_H
#define CCOS_CONTEXT_H

#include <stdint.h>
#include <stddef.h>

typedef struct {
uint16_t sector_size;
uint16_t superblock_fid;
uint16_t bitmap_fid;
size_t size;
uint8_t* data;
} ccos_disk_t;

#endif // CCOS_CONTEXT_H
32 changes: 16 additions & 16 deletions ccos_format.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

#include "ccos_boot_data.h"
#include "common.h"
#include "ccos_context.h"
#include "ccos_disk.h"
#include "ccos_structure.h"
#include "ccos_private.h"

Expand Down Expand Up @@ -94,15 +94,15 @@ static ccos_bitmask_list_t init_bitmask(ccos_disk_t* disk, bitmask_info_t info)
memset(bitmask_bytes + info.tail_offset, 0xff, info.tail_length);
}

update_bitmask_checksum((ccfs_handle)disk, bitmask);
update_bitmask_checksum(disk, bitmask);
}

// Build list of bitmask blocks.
ccos_bitmask_list_t bitmask_list = find_bitmask_blocks((ccfs_handle)disk, disk->data, disk->size);
ccos_bitmask_list_t bitmask_list = find_bitmask_blocks(disk);

// Mark the bitmask blocks as used in the bitmask itself.
for (size_t i = 0; i < info.count; i++) {
mark_block((ccfs_handle)disk, &bitmask_list, info.sector + i, 1);
mark_block(disk, &bitmask_list, info.sector + i, 1);
}

return bitmask_list;
Expand All @@ -127,7 +127,7 @@ static ccos_date_t get_current_date() {
}

static void write_superblock(ccos_disk_t* disk, ccos_bitmask_list_t* bitmask_list) {
uint16_t id = disk->superblock_id;
uint16_t id = disk->superblock_fid;

ccos_inode_t* root_dir = (ccos_inode_t*)SECTOR(disk, id);

Expand All @@ -136,7 +136,7 @@ static void write_superblock(ccos_disk_t* disk, ccos_bitmask_list_t* bitmask_lis
root_dir->header.file_id = id;
root_dir->header.file_fragment_index = 0;

root_dir->desc.file_size = get_dir_default_size((ccfs_handle)disk);
root_dir->desc.file_size = get_dir_default_size(disk);

root_dir->desc.name_length = 0;
memset(root_dir->desc.name, ' ', sizeof(root_dir->desc.name));
Expand All @@ -160,25 +160,25 @@ static void write_superblock(ccos_disk_t* disk, ccos_bitmask_list_t* bitmask_lis
root_dir->content_inode_info.block_current = id;
root_dir->content_inode_info.block_prev = CCOS_INVALID_BLOCK;

mark_block((ccfs_handle)disk, bitmask_list, id, 1);
mark_block(disk, bitmask_list, id, 1);

uint16_t* content_blocks = get_inode_content_blocks(root_dir);
size_t max_content_blocks = get_inode_max_blocks((ccfs_handle)disk);
size_t max_content_blocks = get_inode_max_blocks(disk);

memset(content_blocks, 0xFF, max_content_blocks * sizeof(uint16_t));

uint16_t superblock_entry_block = id + 1;
content_blocks[0] = superblock_entry_block;

update_inode_checksums((ccfs_handle)disk, root_dir);
update_inode_checksums(disk, root_dir);

ccos_block_header_t* superblock_entry = (ccos_block_header_t*)SECTOR(disk, superblock_entry_block);
memset(superblock_entry, 0x00, disk->sector_size);
superblock_entry->file_id = id;
superblock_entry->file_fragment_index = 0;
((uint16_t*)superblock_entry)[2] = CCOS_DIR_LAST_ENTRY_MARKER;

mark_block((ccfs_handle)disk, bitmask_list, superblock_entry_block, 1);
mark_block(disk, bitmask_list, superblock_entry_block, 1);
}

static void write_boot_code(ccos_disk_t* disk, disk_format_t format, ccos_bitmask_list_t* bitmask_list) {
Expand All @@ -189,14 +189,14 @@ static void write_boot_code(ccos_disk_t* disk, disk_format_t format, ccos_bitmas

for (size_t i = 0; i < pages; i++) {
memcpy(SECTOR(disk, offset + i), boot_code + i * disk->sector_size, disk->sector_size);
mark_block((ccfs_handle)disk, bitmask_list, offset + i, 1);
mark_block(disk, bitmask_list, offset + i, 1);
}
}

static void write_boot_sector(ccos_disk_t* disk, disk_format_t format, ccos_bitmask_list_t* bitmask_list) {
ccos_boot_sector_t boot_sector = (ccos_boot_sector_t) {
.superblock_fid = disk->superblock_id,
.bitmap_fid = disk->bitmap_block_id,
.superblock_fid = disk->superblock_fid,
.bitmap_fid = disk->bitmap_fid,
};

if (format == CCOS_DISK_FORMAT_GRIDCASE) {
Expand All @@ -209,7 +209,7 @@ static void write_boot_sector(ccos_disk_t* disk, disk_format_t format, ccos_bitm
size_t pages = sizeof(ccos_boot_sector_t) / disk->sector_size;
for (size_t i = 0; i < pages; i++) {
memcpy(SECTOR(disk, i), &boot_sector + i * disk->sector_size, disk->sector_size);
mark_block((ccfs_handle)disk, bitmask_list, i, 1);
mark_block(disk, bitmask_list, i, 1);
}
}

Expand Down Expand Up @@ -243,8 +243,8 @@ int ccos_new_disk_image(disk_format_t format, size_t disk_size, ccos_disk_t* out

ccos_disk_t disk = {
.sector_size = sector_size,
.superblock_id = superblock,
.bitmap_block_id = bitmask.sector,
.superblock_fid = superblock,
.bitmap_fid = bitmask.sector,
.size = disk_size,
.data = data
};
Expand Down
2 changes: 1 addition & 1 deletion ccos_format.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#ifndef CCOS_DISK_TOOL_CCOS_FORMAT_H
#define CCOS_DISK_TOOL_CCOS_FORMAT_H

#include "ccos_context.h"
#include "ccos_disk.h"

#include <stdbool.h>
#include <stdlib.h>
Expand Down
Loading