En windows, la variable de entorno para el home es la unión de "HOMEDRIVE" y "HOMEPATH". Por lo tanto, si lo que quieres es que el directorio ".wii" esté en el "documents and settings/usuario", lo que tienes que hacer es:
void get_key(const char *name, u8 *key, u32 len)
{
char path[512];//por si acaso
char *home;
#ifdef WIN32
char *drive;/en windows es necesario
#endif
FILE *fp;
#ifdef WIN32
drive=getenv("HOMEDRIVE");
if (drive== 0)
fatal("cannot find HOMEDRIVE");
home = getenv("HOMEPATH");
if (home == 0)
fatal("cannot find HOMEPATH");
snprintf(path, sizeof path, "%s%s\\.wii\\%s", home, name);// no me queda muy claro si hay que usar "\\" o "/" para separar los directorios, prueba con uno y luego con otro si no funciona
#else
home = getenv("HOME");
if (home == 0)
fatal("cannot find HOME");
snprintf(path, sizeof path, "%s/.wii/%s", home, name);
#endif
fp = fopen(path, "r+");//en sistemas nuevos la "b" sobra, se usa un r+
if (fp == 0)
fatal("cannot open %s", name);
if (fread(key, len, 1, fp) != 1)
fatal("error reading %s", name);
fclose(fp);
}
Lo he escrito un poco rápido, así que échale un vistazo. Eso buscará la key en "c:\documents and settings\usuario\.wii\key.bin" teniendo en cuenta que la unidad donde esta el home es "c:", y tu usuario se llama "usuario"
. Si quieres buscar el archivo "key.bin" junto con la aplicación, todo eso sobra, bastaría con hacer un "fopen(name)", pero así queda más chulo
Un saludo
PD: No he llegado a probar el código original, pero si lo estabas ejecutando desde el terminal de msys, seguramente estaría buscando el archivo de claves en "c:\dev-cpp\home\<tu usuario>\.wii", que es el directorio al que apunta el PATH dentro de esa shell.