diff --git a/include/trap/syscallDataStruct.h b/include/trap/syscallDataStruct.h index 0a08471f56d927268a846c87f90a84019dc1325e..8ae07ec6398873517e53b26efc8b6e7700441843 100644 --- a/include/trap/syscallDataStruct.h +++ b/include/trap/syscallDataStruct.h @@ -1,6 +1,8 @@ #ifndef _SYSCALL_H #define _SYSCALL_H +#include <types.h> + struct utsname { char sysname[65]; char nodename[65]; @@ -23,7 +25,12 @@ struct timespec { }; struct DirentUser { - // TODO + u64 d_ino; // ç´¢å¼•ç»“ç‚¹å· + i64 d_off; // 到下一个direntçš„åç§» + u16 d_reclen; // 当å‰dirent的长度 + u8 d_type; // 文件类型 + char d_name[]; //文件å }; + #endif diff --git a/kern/boot/main.c b/kern/boot/main.c index 9081bd101386fc922bf748071a1623c8deab30dc..462cb8afcf5ce66dbd8d2f213dc8e9391dbe3fec 100644 --- a/kern/boot/main.c +++ b/kern/boot/main.c @@ -48,7 +48,7 @@ void main() { isStarted[i] = 0; } isStarted[cpuid()] = 1; // æ ‡è®°è‡ªå·±å·²å¯åЍ - + printf("OFF=%d\n", (u64)(&(((struct DirentUser*)0)->d_name))); // consoleinit(); printInit(); printf("FarmOS kernel is booting (on hart %d)\n", cpuid()); diff --git a/kern/fs/fat32.c b/kern/fs/fat32.c index 2bac517fbb92b4d2ab360604c9c7989b377b0b8c..ca84163f58d373eac94e58fa15dd985ba994f86b 100644 --- a/kern/fs/fat32.c +++ b/kern/fs/fat32.c @@ -526,12 +526,38 @@ int fileWrite(struct Dirent *file, int user, u64 src, uint off, uint n) { return n; } + +// // GetDents 工具函数 +// static void appendDent(u64 d_ino, i64 d_off, u16 d_reclen, u8 d_type, char *d_name, struct DirentUser **last, struct DirentUser **next) { +// return; +// // ç»´æŠ¤å‰æŒ‡é’ˆï¼šä¿®æ”¹ä¸Šä¸€ä¸ª DirentUser çš„ d_off +// if (*last != NULL) { +// (*last)->d_off = d_off; +// } +// // ç§»åŠ¨å‰æŒ‡é’ˆï¼šä¿®æ”¹ä¸Šä¸€ä¸ª DirentUser ä¸ºå½“å‰ DirentUser +// *last = *next; +// // ç»´æŠ¤å½“å‰æŒ‡é’ˆï¼šèµ‹å€¼å½“å‰ DirentUser +// (*next)->d_ino = d_ino; +// (*next)->d_off = 0; +// (*next)->d_reclen = d_reclen; +// (*next)->d_type = d_type; +// const int off = (int)(&(((struct DirentUser*)0)->d_name)); +// strncpy((*next)->d_name, d_name, d_reclen - off); +// // ç§»åŠ¨å½“å‰æŒ‡é’ˆï¼šä¿®æ”¹ä¸‹ä¸€ä¸ª DirentUser çš„ä½ç½® +// *next = (struct DirentUser *)((u8 *)*next + d_reclen); +// } + + /** * @brief 获å–目录的æ¡ç›® * @return æˆåŠŸæ‰§è¡Œï¼Œè¿”å›žè¯»å–çš„å—节数,失败返回-1 */ int getDents(struct Dirent *dir, struct DirentUser *buf, int len) { - panic("unimplemented"); + // u8 *last = NULL; + // u8 *next = (u8 *)buf;// 下一个 DirentUser çš„ä½ç½® + + + return 0; } diff --git a/user/test_argv.c b/user/test_argv.c index 240982fdb26fedb955d0530ac4a4d8daff5a87d6..847bcdffee2500ed8ff014ad1cb3dad6213579f5 100644 --- a/user/test_argv.c +++ b/user/test_argv.c @@ -1,7 +1,6 @@ #include <stddef.h> #include <stdio.h> #include <syscall.h> -#include <trap/syscallDataStruct.h> #include <unistd.h> int main(int argc, char *argv[]) { diff --git a/user/test_clone.c b/user/test_clone.c index 976dbbb02f65d9cff8977712803467d7b802f56f..b32c85a652118b782ac11a7d36a3283a32b2fb79 100644 --- a/user/test_clone.c +++ b/user/test_clone.c @@ -2,7 +2,6 @@ #include <stddef.h> #include <stdio.h> #include <syscall.h> -#include <trap/syscallDataStruct.h> #include <unistd.h> __attribute__((aligned(4096))) char stack[4096]; diff --git a/user/test_execve.c b/user/test_execve.c index 2c5b6562b320d065539785b133785654f9d8681b..26f3b7ca31e7570da01b2c79f933899e66c3199c 100644 --- a/user/test_execve.c +++ b/user/test_execve.c @@ -1,7 +1,6 @@ #include <stddef.h> #include <stdio.h> #include <syscall.h> -#include <trap/syscallDataStruct.h> #include <unistd.h> int main() { diff --git a/user/test_exit.c b/user/test_exit.c index de753f10762a8e58e29fad08494c8c8d4dc35ba8..d6ca5b6f0382688048b40cb565d638399747003f 100644 --- a/user/test_exit.c +++ b/user/test_exit.c @@ -1,7 +1,6 @@ #include <stddef.h> #include <stdio.h> #include <syscall.h> -#include <trap/syscallDataStruct.h> #include <unistd.h> int main() { diff --git a/user/test_init.c b/user/test_init.c index c864082bf9889ca0c53ae6372474a248c0ab0cbe..f5798526a030c0d36044cb287919389954bc004b 100644 --- a/user/test_init.c +++ b/user/test_init.c @@ -2,7 +2,6 @@ #include <stddef.h> #include <stdio.h> #include <syscall.h> -#include <trap/syscallDataStruct.h> #include <unistd.h> int main() { diff --git a/user/test_sleep.c b/user/test_sleep.c index 6f807d578d3f717e2cd0668a5f53fbf7256f8fc5..56cc147775b4366703483928a738d9d09abdf4d1 100644 --- a/user/test_sleep.c +++ b/user/test_sleep.c @@ -2,7 +2,6 @@ #include <stddef.h> #include <stdio.h> #include <syscall.h> -#include <trap/syscallDataStruct.h> #include <unistd.h> int main() { diff --git a/user/test_while.c b/user/test_while.c index d92f4356412bb93bfc4da865de474f6c3ddb633f..8f45cd2af398aa360b688e08627ad9761becf260 100644 --- a/user/test_while.c +++ b/user/test_while.c @@ -1,7 +1,6 @@ #include <stddef.h> #include <stdio.h> #include <syscall.h> -#include <trap/syscallDataStruct.h> #include <unistd.h> int main() {