Besoin d’aide pour porter Win32 C ++ vers Unix

Je cherche de l’aide pour porter cet outil Windows sur Unix (Mac / OSX);

http://www.oxyron.de/html/netdrive01src.zip

Tout d’abord, j’aimerais savoir si quelqu’un pourrait prendre quelques instants pour examiner rapidement le (petit) code source, si la tâche est relativement simple.

Deuxièmement, tous les conseils sur le portage du code seraient très appréciés.

J’ai déjà essayé de le comstackr (avec Xcode / G ++) mais il génère plus de 80 erreurs, beaucoup d’entre elles semblent avoir des constantes telles que “_MAX_FNAME”, une constante du système pour définir la longueur maximale du nom de fichier. J’ai essayé de regarder à travers les en-têtes C standard (sur mon Mac) mais pendant que je trouvais des constantes similaires dans, disons, SYSLIMITS.H (NAME_MAX), je n’arrive toujours pas à faire beaucoup de progrès.

Il semble y avoir quelques classes d’erreur différentes:

main.cpp:8:19: error: conio.h: No such file or directory main.cpp:61: error: '_kbhit' was not declared in this scope 

conio.h est l’en-tête de la console de Windows. _kbhit en est une des fonctions.

 main.cpp:17: warning: deprecated conversion from ssortingng constant to 'char*' 

Une constante de chaîne est de type const char * dans ANSI C ++. Il y a aussi pas mal de fonctions de chaîne impaires dans le code qui n’existeraient pas si vous utilisiez st ++ std :: ssortingng plutôt que des chaînes C utilisant new.

 vbinary.cpp:5:16: error: io.h: No such file or directory vdirectory.cpp:91: error: '_findfirst' was not declared in this scope vdirectory.cpp:99: error: '_findnext' was not declared in this scope vdirectory.cpp:101: error: '_findclose' was not declared in this scope vfile.cpp:19: error: '_MAX_DRIVE' was not declared in this scope vfile.cpp:20: error: '_MAX_DIR' was not declared in this scope vfile.cpp:21: error: '_MAX_FNAME' was not declared in this scope vfile.cpp:22: error: '_MAX_EXT' was not declared in this scope 

io.h est un autre en-tête Microsoft, avec les fonctions de navigation des répertoires et des macros utilisées avec eux. Utilisez plutôt les fonctions de dirent.h Des fonctions telles que VDirectory::CreatePath supposent qu’il existe des lettres de lecteur distinctes; les systèmes de fichiers unix ne fonctionnent pas, donc il est probablement préférable d’avoir des classes complètement séparées pour les implémentations plutôt que d’essayer de placer deux corps séparés dans chaque fonction à l’aide de #ifdef s, et d’utiliser un #ifdef pour sélectionner celui approprié.

Des constantes telles que _MAX_FNAME trouvent à la fois dans io.h et dans stdlib.h de Microsoft. Ils ne sont pas dans le standard stdlib.h , ni les fonctions dont ils limitent la taille en entrée. Les versions POSIX utilisent NAME_MAX .

Si la plupart des erreurs concernent des définitions de préprocesseur, vous pouvez append ces définitions sur la ligne de commande du compilateur. Pour g ++, par exemple, il s’agirait de l’ -D _MAX_FNAME=NAME_MAX (ou de la valeur applicable).

Un bref aperçu du code ( grep "#include <" ) montre que toutes les dépendances de la plate-forme sont dans l'en-tête nethost. Cet en-tête contient tous les # ifdef nécessaires pour gérer l'indépendance de la plate-forme:

 #ifdef WIN32 #define WIN32_LEAN_AND_MEAN 1 #include  #else #ifdef __APPLE__ #include  #endif #include  #include  #include  #include  #include  #include  #endif 

Ça a l' air bien À première vue.