336 {
337 auto* dir_fi =
static_cast<FatInode*
>(dir->
fs_private);
338 std::array<char, kPathBufSize> full_path{};
339 strncpy(full_path.data(), dir_fi->path.data(), full_path.size() - 1);
340 size_t dir_len =
strlen(full_path.data());
341 strncpy(full_path.data() + dir_len, name, full_path.size() - dir_len - 1);
342 full_path[full_path.size() - 1] = '\0';
343
345 FRESULT fr = f_mkdir(full_path.data());
346 if (fr != FR_OK) {
347 return std::unexpected(
Error{FresultToErrorCode(fr)});
348 }
349 } else {
350 FIL fil;
351 FRESULT fr = f_open(&fil, full_path.data(), FA_CREATE_NEW | FA_WRITE);
352 if (fr != FR_OK) {
353 return std::unexpected(
Error{FresultToErrorCode(fr)});
354 }
355 (void)f_close(&fil);
356 }
357
359 if (!inode_result) {
360 return std::unexpected(inode_result.error());
361 }
363 auto* new_fi =
static_cast<FatInode*
>(inode->
fs_private);
369 strncpy(new_fi->path.data(), full_path.data(), new_fi->path.size() - 1);
370 new_fi->path[new_fi->path.size() - 1] = '\0';
371 return inode;
372}
static constexpr uint32_t kDefaultFilePermissions
普通文件默认权限位
auto AllocateInode() -> Expected< vfs::Inode * > override
分配新 inode(由 FatFS FILINFO 快照支撑)
uint32_t permissions
权限位(简化版)
uint64_t ino
inode 编号(文件系统内唯一)
void * fs_private
文件系统私有数据指针