feat: update .gitignore and enhance ext2 file timestamps

Added back g_Unixseconds to the ext2 driver

Signed-off-by: kaguya <vpshinomiya@protonmail.com>
This commit is contained in:
kaguya
2026-04-16 00:37:30 -04:00
parent bd77c7a2b9
commit 016ee32987
7 changed files with 23 additions and 19 deletions
+2 -1
View File
@@ -1 +1,2 @@
build/ build/
user/build/*
+2 -1
View File
@@ -55,5 +55,6 @@
"C_Cpp_Runner.useLeakSanitizer": false, "C_Cpp_Runner.useLeakSanitizer": false,
"C_Cpp_Runner.showCompilationTime": false, "C_Cpp_Runner.showCompilationTime": false,
"C_Cpp_Runner.useLinkTimeOptimization": false, "C_Cpp_Runner.useLinkTimeOptimization": false,
"C_Cpp_Runner.msvcSecureNoWarnings": false "C_Cpp_Runner.msvcSecureNoWarnings": false,
"C_Cpp.errorSquiggles": "enabled"
} }
Binary file not shown.
+16 -15
View File
@@ -5,6 +5,7 @@
#include <stdbool.h> #include <stdbool.h>
#include "string.h" #include "string.h"
#include "mp/spinlock.h" #include "mp/spinlock.h"
#include "arch/x86_64/pit.h"
// ── module state ───────────────────────────────────────────────────────────── // ── module state ─────────────────────────────────────────────────────────────
@@ -607,8 +608,8 @@ bool ext2_write_file_internal(ext2_inode_t* inode, uint32_t inum,
} }
inode->i_blocks = ((new_size + block_size - 1) / block_size) * (block_size / 512); inode->i_blocks = ((new_size + block_size - 1) / block_size) * (block_size / 512);
//inode->i_mtime = (uint32_t)g_Unixseconds; inode->i_mtime = (uint32_t)g_Unixseconds;
//inode->i_ctime = (uint32_t)g_Unixseconds; inode->i_ctime = (uint32_t)g_Unixseconds;
kfree(tmp); kfree(tmp);
ext2_write_inode_internal(inum, inode); ext2_write_inode_internal(inum, inode);
return true; return true;
@@ -653,8 +654,8 @@ bool ext2_truncate_internal(ext2_inode_t* inode, uint32_t inum, uint32_t new_siz
// extending: sparse — just update the size field // extending: sparse — just update the size field
inode->i_size = new_size; inode->i_size = new_size;
//inode->i_mtime = (uint32_t)g_Unixseconds; inode->i_mtime = (uint32_t)g_Unixseconds;
//inode->i_ctime = (uint32_t)g_Unixseconds; inode->i_ctime = (uint32_t)g_Unixseconds;
return ext2_write_inode_internal(inum, inode); return ext2_write_inode_internal(inum, inode);
} }
@@ -765,7 +766,7 @@ static bool dir_add_entry_internal(ext2_inode_t* dir, uint32_t dir_inum,
dir->i_size += block_size; dir->i_size += block_size;
dir->i_blocks = (dir->i_size / block_size) * (block_size / 512); dir->i_blocks = (dir->i_size / block_size) * (block_size / 512);
//dir->i_mtime = (uint32_t)g_Unixseconds; dir->i_mtime = (uint32_t)g_Unixseconds;
ext2_write_inode_internal(dir_inum, dir); ext2_write_inode_internal(dir_inum, dir);
kfree(buf); kfree(buf);
return true; return true;
@@ -799,7 +800,7 @@ static bool dir_remove_entry_internal(ext2_inode_t* dir, uint32_t dir_inum, cons
else else
e->inode = 0; // first entry: zero inode e->inode = 0; // first entry: zero inode
ext2_write_block_raw(phys, buf); ext2_write_block_raw(phys, buf);
//dir->i_mtime = (uint32_t)g_Unixseconds; dir->i_mtime = (uint32_t)g_Unixseconds;
ext2_write_inode_internal(dir_inum, dir); ext2_write_inode_internal(dir_inum, dir);
kfree(buf); kfree(buf);
return true; return true;
@@ -912,7 +913,7 @@ bool ext2_read_dir_internal(ext2_inode_t* dir) {
uint8_t nl = e->name_len > EXT2_NAME_LEN ? EXT2_NAME_LEN : e->name_len; uint8_t nl = e->name_len > EXT2_NAME_LEN ? EXT2_NAME_LEN : e->name_len;
memcpy(name, e->name, nl); memcpy(name, e->name, nl);
name[nl] = '\0'; name[nl] = '\0';
printf(" %-32s inode=%-6u %s\n", printf(" %s inode=%u %s\n",
name, e->inode, ext2_file_type_string(e->file_type)); name, e->inode, ext2_file_type_string(e->file_type));
} }
off += e->rec_len; off += e->rec_len;
@@ -1017,7 +1018,7 @@ bool ext2_create_file_internal(ext2_inode_t* dir, uint32_t dir_inum,
ext2_inode_t inode = {0}; ext2_inode_t inode = {0};
inode.i_mode = EXT2_S_IFREG | 0644; inode.i_mode = EXT2_S_IFREG | 0644;
inode.i_links_count = 1; inode.i_links_count = 1;
//inode.i_atime = inode.i_ctime = inode.i_mtime = (uint32_t)g_Unixseconds; inode.i_atime = inode.i_ctime = inode.i_mtime = (uint32_t)g_Unixseconds;
ext2_write_inode_internal(inum, &inode); ext2_write_inode_internal(inum, &inode);
if (!dir_add_entry_internal(dir, dir_inum, inum, name, EXT2_FT_REG_FILE)) { if (!dir_add_entry_internal(dir, dir_inum, inum, name, EXT2_FT_REG_FILE)) {
@@ -1060,7 +1061,7 @@ bool ext2_mkdir_internal(ext2_inode_t* parent, uint32_t parent_inum,
dir.i_size = block_size; dir.i_size = block_size;
dir.i_blocks = block_size / 512; dir.i_blocks = block_size / 512;
dir.i_block[0] = phys; dir.i_block[0] = phys;
//dir.i_atime = dir.i_ctime = dir.i_mtime = (uint32_t)g_Unixseconds; dir.i_atime = dir.i_ctime = dir.i_mtime = (uint32_t)g_Unixseconds;
ext2_write_inode_internal(inum, &dir); ext2_write_inode_internal(inum, &dir);
uint8_t* buf = kmalloc(block_size); uint8_t* buf = kmalloc(block_size);
@@ -1125,11 +1126,11 @@ bool ext2_unlink_internal(ext2_inode_t* dir, uint32_t dir_inum, const char* name
fi.i_links_count--; fi.i_links_count--;
if (fi.i_links_count == 0) { if (fi.i_links_count == 0) {
ext2_free_inode_blocks_internal(&fi); ext2_free_inode_blocks_internal(&fi);
//fi.i_dtime = (uint32_t)g_Unixseconds; fi.i_dtime = (uint32_t)g_Unixseconds;
ext2_write_inode_internal(inum, &fi); ext2_write_inode_internal(inum, &fi);
ext2_free_inode_internal(inum, false); ext2_free_inode_internal(inum, false);
} else { } else {
//fi.i_ctime = (uint32_t)g_Unixseconds; fi.i_ctime = (uint32_t)g_Unixseconds;
ext2_write_inode_internal(inum, &fi); ext2_write_inode_internal(inum, &fi);
} }
ext2_sync(); ext2_sync();
@@ -1166,7 +1167,7 @@ bool ext2_rmdir_internal(ext2_inode_t* parent, uint32_t parent_inum, const char*
ext2_free_inode_blocks_internal(&dir); ext2_free_inode_blocks_internal(&dir);
dir.i_links_count = 0; dir.i_links_count = 0;
//dir.i_dtime = (uint32_t)g_Unixseconds; dir.i_dtime = (uint32_t)g_Unixseconds;
ext2_write_inode_internal(inum, &dir); ext2_write_inode_internal(inum, &dir);
ext2_free_inode_internal(inum, true); ext2_free_inode_internal(inum, true);
@@ -1272,7 +1273,7 @@ bool ext2_symlink_internal(ext2_inode_t* dir, uint32_t dir_inum,
inode.i_mode = EXT2_S_IFLNK | 0777; inode.i_mode = EXT2_S_IFLNK | 0777;
inode.i_links_count = 1; inode.i_links_count = 1;
inode.i_size = tlen; inode.i_size = tlen;
//inode.i_atime = inode.i_ctime = inode.i_mtime = (uint32_t)g_Unixseconds; inode.i_atime = inode.i_ctime = inode.i_mtime = (uint32_t)g_Unixseconds;
if (tlen < 60) { if (tlen < 60) {
// fast symlink: target stored directly in i_block[] // fast symlink: target stored directly in i_block[]
@@ -1368,7 +1369,7 @@ bool ext2_chmod_internal(uint32_t inum, uint16_t mode) {
ext2_inode_t inode; ext2_inode_t inode;
if (!ext2_read_inode_internal(inum, &inode)) return false; if (!ext2_read_inode_internal(inum, &inode)) return false;
inode.i_mode = (inode.i_mode & 0xF000) | (mode & 0x0FFF); inode.i_mode = (inode.i_mode & 0xF000) | (mode & 0x0FFF);
//inode.i_ctime = (uint32_t)g_Unixseconds; inode.i_ctime = (uint32_t)g_Unixseconds;
return ext2_write_inode_internal(inum, &inode); return ext2_write_inode_internal(inum, &inode);
} }
@@ -1377,7 +1378,7 @@ bool ext2_chown_internal(uint32_t inum, uint16_t uid, uint16_t gid) {
if (!ext2_read_inode_internal(inum, &inode)) return false; if (!ext2_read_inode_internal(inum, &inode)) return false;
inode.i_uid = uid; inode.i_uid = uid;
inode.i_gid = gid; inode.i_gid = gid;
//inode.i_ctime = (uint32_t)g_Unixseconds; inode.i_ctime = (uint32_t)g_Unixseconds;
return ext2_write_inode_internal(inum, &inode); return ext2_write_inode_internal(inum, &inode);
} }
+3 -2
View File
@@ -203,6 +203,7 @@ void kmain(void) {
x86_64_PIT_Initialize(1000); x86_64_PIT_Initialize(1000);
asm volatile("sti"); asm volatile("sti");
calibrate_tsc(); calibrate_tsc();
//while (1) asm volatile("hlt"); //while (1) asm volatile("hlt");
@@ -425,7 +426,7 @@ void kmain(void) {
} }
pci_init(); /*pci_init();
pci_device_t hda; pci_device_t hda;
if (pci_find_hda(&hda)) { if (pci_find_hda(&hda)) {
@@ -438,7 +439,7 @@ void kmain(void) {
} }
} else { } else {
printf("[PCI] No HDA controller found!\n"); printf("[PCI] No HDA controller found!\n");
} }*/
//syscall_init(); //syscall_init();
Binary file not shown.
BIN
View File
Binary file not shown.