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

Method shmctl

source/kernel/ksystem.cpp:665–712  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

663 message sizes, etc. */
664
665U32 KSystem::shmctl(KThread* thread, U32 shmid, U32 cmd, U32 buf) {
666 std::shared_ptr<SHM> shm;
667 KMemory* memory = thread->memory;
668
669 if (shmid & PRIVATE_SHMID) {
670 shm = thread->process->getSHM(shmid);
671 } else {
672 shm = publicShm[shmid];
673 }
674
675 if (!shm) {
676 return -K_EINVAL;
677 }
678 if (cmd & IPC_64) {
679 cmd &= ~IPC_64;
680 }
681 if (cmd == IPC_RMID) {
682 shm->markedForDelete = 1;
683 }
684 if (!buf)
685 return -K_EFAULT;
686 if (cmd == IPC_STAT) {
687 // ipc_perm
688 memory->writed(buf, shm->key); buf+=4;
689 memory->writed(buf, shm->cuid); buf += 4;
690 memory->writed(buf, shm->cgid); buf += 4;
691 memory->writed(buf, shm->cuid); buf += 4;
692 memory->writed(buf, shm->cgid); buf += 4;
693 memory->writew(buf, 0777); buf += 2;
694 memory->writew(buf, 0); buf += 2;
695 memory->writew(buf, shmid); buf += 2;
696 memory->writew(buf, 0); buf += 2;
697 memory->writed(buf, 0); buf += 4;
698 memory->writed(buf, 0); buf += 4;
699 memory->writed(buf, shm->len); buf += 4;
700 memory->writed(buf, (U32)(shm->atime / 1000000)); buf += 4;
701 memory->writed(buf, (U32)(shm->dtime / 1000000)); buf += 4;
702 memory->writed(buf, (U32)(shm->ctime / 1000000)); buf += 4;
703 memory->writed(buf, shm->cpid); buf += 4;
704 memory->writed(buf, shm->lpid); buf += 4;
705 memory->writew(buf, shm->nattch); buf += 2;
706 memory->writew(buf, 0); buf += 2;
707 memory->writed(buf, 0);
708 } else {
709 kpanic_fmt("Unknown syscall_shmctl cmd=%X", cmd);
710 }
711 return 0;
712}
713
714#define K_RLIM_INFINITY 0xFFFFFFFF
715

Callers

nothing calls this directly

Calls 4

kpanic_fmtFunction · 0.85
getSHMMethod · 0.80
writedMethod · 0.45
writewMethod · 0.45

Tested by

no test coverage detected