MCPcopy Create free account
hub / github.com/danoon2/Boxedwine / utimesat

Method utimesat

source/kernel/kprocess.cpp:2448–2492  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2446#define K_UTIME_OMIT 0x3ffffffe
2447
2448U32 KProcess::utimesat(FD dirfd, BString path, U32 times, U32 flags, bool time64) {
2449 BString dir;
2450 U32 result = 0;
2451
2452 if (path.charAt(0) != '/')
2453 result = getCurrentDirectoryFromDirFD(dirfd, dir);
2454
2455 if (result)
2456 return result;
2457 std::shared_ptr<FsNode> node = Fs::getNodeFromLocalPath(dir, path, (flags & 0x100)==0);
2458 if (!node) {
2459 return -K_ENOENT;
2460 }
2461 U64 lastAccessTime = 0;
2462 U32 lastAccessTimeNano = 0;
2463 U64 lastModifiedTime = 0;
2464 U32 lastModifiedTimeNano = 0;
2465
2466 if (times) {
2467 if (time64) {
2468 lastAccessTime = memory->readd(times);
2469 lastAccessTimeNano = memory->readd(times + 8);
2470 lastModifiedTime = memory->readd(times + 12);
2471 lastModifiedTimeNano = memory->readd(times + 20);
2472 } else {
2473 lastAccessTime = memory->readd(times);
2474 lastAccessTimeNano = memory->readd(times + 4);
2475 lastModifiedTime = memory->readd(times + 8);
2476 lastModifiedTimeNano = memory->readd(times + 12);
2477 }
2478 }
2479 if (lastAccessTimeNano != K_UTIME_OMIT) {
2480 if (lastAccessTimeNano == K_UTIME_NOW) {
2481 lastAccessTime = time(nullptr);
2482 lastAccessTimeNano = 0;
2483 }
2484 }
2485 if (lastModifiedTimeNano != K_UTIME_OMIT) {
2486 if (lastModifiedTimeNano == K_UTIME_NOW) {
2487 lastModifiedTime = (U32)time(nullptr);
2488 lastModifiedTimeNano = 0;
2489 }
2490 }
2491 return node->setTimes(lastAccessTime, lastAccessTimeNano, lastModifiedTime, lastModifiedTimeNano);
2492}
2493
2494U32 KProcess::utimesat64(FD dirfd, BString path, U32 times, U32 flags) {
2495 BString dir;

Callers 2

syscall_utimensatFunction · 0.80
syscall_utimensat_time64Function · 0.80

Calls 3

charAtMethod · 0.80
readdMethod · 0.45
setTimesMethod · 0.45

Tested by

no test coverage detected