Sujet : Re: Procédure ARGV
De : _remove_vision (at) *nospam* atari.org (Good Old TOS)
Groupes : fr.comp.sys.atariDate : 04. Jan 2025, 19:16:24
Autres entêtes
Organisation : Guest of ProXad - France
Message-ID : <67797af9$0$11457$426a74cc@news.free.fr>
References : 1 2 3 4 5 6 7 8 9 10 11
User-Agent : Mozilla Thunderbird
Le 04/01/2025 à 15:32, OL a écrit :
Le 04/01/2025 à 11:07, Good Old TOS a écrit :
Hello,
>
pb résolu grâce à Olivier! Un grand merci!
Voilà le code fonctionnel:
long XPexec_eas(int mode, char* full_name, char* cmdline)
{
/* A BIG thnaks to Olivier Landemarre ! */
char buffer[1500] ;
char eas_cmd[128] ;
char* pt_env = buffer ;
char* source ;
char* envp = _BasPag->p_env ;
>
/* Program Environment is required else it fails (e.g. err 27 with curl) */
while( *envp )
{
while ( *envp ) *pt_env++ = *envp++ ;
*pt_env++ = 0 ;
envp++ ;
}
>
*pt_env++='A' ;
*pt_env++='R' ;
*pt_env++='G' ;
*pt_env++='V' ;
*pt_env++='=' ;
*pt_env++ = 0 ;
*pt_env++ = ' ' ; /* These 2 are important else */
*pt_env++ = 0 ; /* First parameter is ignored ! */
while ( *cmdline )
{
if ( *cmdline == ' ' ) *pt_env++ = 0 ; /* New parameter/value */
else if ( *cmdline == '\' ) *pt_env++ = '/' ; /* Change \ to / */
else *pt_env++ = *cmdline ; /* Next char of parameter/value */
cmdline++ ;
}
>
*pt_env++ = 0 ;
*pt_env = 0 ;
eas_cmd[0] = 127 ;
return Pexec( mode, full_name, eas_cmd, buffer ) ;
}
>
Il manquait un espace + \0 après "ARGV=" avant la génération des paramètres.
Yep cool
une fois j'ai passé une semaine a chercher un bug totalement stupide de niveau débutant, j'avais mis mis:
if(condition = 1) ... au lieu de if(condition == 1) ... !!!!
J'ai eu beau relire 1000 fois le code je ne voyais pas
Bon là j'ai du tester avec un petit logiciel écrit il y a 30 ans pour voir ce qui était passé à l'application sinon je n'aurais pas trouvé pourtant c'est du C classique mais on ne gère pas cela tous les jours!
Ouaip...
En fait en premier c'est argv[0] qui doit être passé, soit le nom de l'applicatif à lancer, mais un espace suffit, si pas présent du coup ça décale les paramètres passés (cf. message de Thorsten).
Mais quelle galère pour faire juste un appel ""long" à Pexec !
Merci beaucoup en tout cas!