[RustPython] fcntl.ioctl 수정하기
[RustPython] fcntl.ioctl 수정하기 CPython에서 RustPython은 RustPython은 Integer 타입만 받는 상황이고, 위 사진처럼 수정한 내용으로 테스트를 정상적으로 통과했고 머지될 수 있었지만, 좀 더 나은 방법이 존재했다. 내가 PR이 Merge된 후 내가 작업한 내용과 관련된 새로운 PR이 올라왔다. Allow fcntl functions to accept objects with fileno() function 첫 번째 인자로 PyObjectRef 타입을 받는 것이 아닌, io::Fildes 타입을 받게 되면 바로 fd 값을 받을 수 있게 된다. 결과적으로 내가 수정한 내용을 훨씬 줄일 수 있는 내용이었다. 사실 이 내용은 바로 위에 있는 함수인 Merged PR
개요
ioctl 함수의 첫 번째 인자로 File Descriptor를 받는다. File Descriptor는 fileno()를 통해 구한 Integer 타입 fileno()를 갖고 있는 IOBase의 객체여야한다.ioctl 함수의 첫 번째 인자로 Integer 타입만 받도록 되어있었고, fileno() 메서드를 갖고 있는 객체에 대한 검증은 되지 않고 있는 상황이었다. 따라서, Integer 타입 외의 fileno() 메서드를 갖고 있는 객체도 받을 수 있게 변경했다. 과정
분석
fcntl.ioctl() 함수는 첫 번째 인자로 File Descriptor 를 받는다. 이때, Integer 타입의 File Descriptor를 받는 것 뿐만 아니라, fileno() 메소드를 가진 객체 역시 받을 수 있어야한다.fileno() 메소드를 갖고 있는 객체까지 받을 수 있게 수정해야 한다. 수정
ioctl() 함수가 받고 있는 첫 번째 인자의 타입을 i32에서 PyObjectRef로 변경한다.fileno() 메소드를 갖고 있는지 확인하고, 갖고 있다면 호출해 i32 타입의 fd 값을 구한다.
fcntl을 보면 힌트를 얻을 수 있는데, 제대로 확인하지 못했다. 테스트를 통과한다고 끝이라고 생각하지말고, 좀 더 나은 방법이 있는지 고민해봐야겠다.