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:
@@ -1 +1,2 @@
|
|||||||
build/
|
build/
|
||||||
|
user/build/*
|
||||||
Vendored
+2
-1
@@ -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
@@ -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
@@ -205,6 +205,7 @@ void kmain(void) {
|
|||||||
calibrate_tsc();
|
calibrate_tsc();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//while (1) asm volatile("hlt");
|
//while (1) asm volatile("hlt");
|
||||||
|
|
||||||
ata_init();
|
ata_init();
|
||||||
@@ -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.
Binary file not shown.
Reference in New Issue
Block a user