2010-10-17 10 views
8

I'm writing una capa entre un POSIX filesystem y Windows usando Dokan, y la necesidad de convertir los valores de error de la errno kind (EINVAL, ENOENT, etc.), a la que sus equivalentes Win32 'recibiría cuando llame al GetLastError() (como ERROR_INVALID_PARAMETER).Convertir a Win32 GetLastError() equivalentes

¿Existe alguna función, biblioteca o referencia que pueda usar para realizar estas conversiones?

Normalmente exploro la fuente de Python en busca de inspiración sobre estos temas, pero Python claramente evita esta necesidad (al menos hasta donde puedo decir).

Como ejemplo, EINVAL (22) se convertiría a ERROR_INVALID_PARAMETER (87).

Respuesta

9

Había hecho un experimento sobre este tema en el pasado, basado principalmente en la unidad Microsoft DOSMAP.CPP. Sin embargo, cancelé el proyecto en ese momento porque el mapeo de errores no siempre era correcto para códigos de error particulares. Por ejemplo, no todas las versiones POSIX devuelven EINVAL para ERROR_INVALID_ACCESS, algunas devuelven EACCES. También hice una comparación entre errno.h system error numbers of POSIX.1-2008 y DOSMAP.CPP, mingw.c, Postgresql error.c, tclWinError.c, MySQL my_winerr.c y muchos más; a veces, la regla de mapeo difiere entre ellos para códigos de error particulares. Personalmente, sugiero que se ocupe solo del mapeo de código de error consistente entre ellos.

4

Por cada errno hay en general muchos valores posibles GetLastError, por lo que lo que está pensando puede no ser necesariamente factible.

De todos modos, simplemente busqué en Google "errno to getlasterror", y el primer hit de Google proporcionó this correspondence list de las fuentes de Cygwin.

Es la manera incorrecta, GetLastError a errno, pero ¿puede ser útil?

Cheers & hth.

Cuestiones relacionadas