Deutsch   English   Français   Italiano  
<67797af9$0$11457$426a74cc@news.free.fr>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.mixmin.net!proxad.net!feeder1-2.proxad.net!cleanfeed4-a.proxad.net!nnrp2-1.free.fr!not-for-mail
Date: Sat, 4 Jan 2025 19:16:24 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: =?UTF-8?Q?Re=3A_Proc=C3=A9dure_ARGV?=
Newsgroups: fr.comp.sys.atari
References: <6776c99f$0$12931$426a74cc@news.free.fr>
 <6778159f$0$513$426a74cc@news.free.fr>
 <677826a2$0$29717$426a74cc@news.free.fr> <Q9EaQy098-PVA5Z7zAi1RLKy4XQ@jntp>
 <mIBAMcSyY7LpBCtFdtvLpUFiqJc@jntp> <67785429$0$375$426a74cc@news.free.fr>
 <n2atGw7UckVKd_awDmn5Fdq4Hf8@jntp> <677866ee$0$12914$426a34cc@news.free.fr>
 <6778765b$0$29730$426a34cc@news.free.fr>
 <6779084b$0$407$426a74cc@news.free.fr> <As32lgMMpUUm8zw8mfbxlR1lU1Y@jntp>
Content-Language: fr
From: Good Old TOS <_remove_vision@atari.org>
In-Reply-To: <As32lgMMpUUm8zw8mfbxlR1lU1Y@jntp>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Lines: 68
Message-ID: <67797af9$0$11457$426a74cc@news.free.fr>
Organization: Guest of ProXad - France
NNTP-Posting-Date: 04 Jan 2025 19:16:25 CET
NNTP-Posting-Host: 83.159.222.32
X-Trace: 1736014585 news-3.free.fr 11457 83.159.222.32:2426
X-Complaints-To: abuse@proxad.net
Bytes: 3705

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!