2010-10-17 17 views
8

I'm writing warstwę pomiędzy POSIX filesystem i Windows za pomocą Dokan i trzeba konwertować wartości błędów z errno kind (EINVAL, ENOENT, itd.), Do Win32 odpowiedniki cię otrzyma dzwoniąc pod numer GetLastError() (np. ERROR_INVALID_PARAMETER).Konwersja wartości błędów errno.h Win32 GetLastError() ekwiwalenty

Czy istnieje istniejąca funkcja, biblioteka lub punkt odniesienia, których mogę użyć do przeprowadzenia tych konwersji?

Zazwyczaj przeglądam źródła Pythona, aby uzyskać inspirację w tych kwestiach, ale Python starannie unika tej potrzeby (przynajmniej na tyle, na ile mogę to stwierdzić).

Jako przykład: EINVAL (22) zostanie przekonwertowany na ERROR_INVALID_PARAMETER (87).

Odpowiedz

9

Przeprowadziłem eksperyment na ten temat w przeszłości, głównie w oparciu o jednostkę Microsoft DOSMAP.CPP. Jednak anulowałem projekt w tym czasie, ponieważ mapowanie błędów nie zawsze było odpowiednie dla poszczególnych kodów błędów. Na przykład, nie każda wersja w systemie POSIX zwraca EINVAL dla ERROR_INVALID_ACCESS, niektóre z nich zamiast tego zwracają EACCES. Dokonałem również porównania między errno.h system error numbers of POSIX.1-2008 i DOSMAP.CPP, mingw.c, Postgresql error.c, tclWinError.c, MySQL my_winerr.c i wieloma innymi; czasami reguła mapowania różni się między nimi dla poszczególnych kodów błędów. Osobiście sugeruję, abyś radził sobie tylko z spójnym mapowaniem kodu błędu między nimi.

4

Dla każdego jest generalnie wiele możliwych wartości GetLastError, więc to, co myślisz, niekoniecznie musi być wykonalne.

W każdym razie, po prostu wpisałem hasło "errno to getlasterror", a pierwszy hit google dostarczył this correspondence list ze źródeł Cygwin.

To jest zła droga, GetLastError do errno, ale być może pomocne?

Pozdrawiam & hth.