/***************************************************************************** Application ASH: args.c (c) Pierre Adriaans 1994 ------------------------------------------------------------------------------ Formatteur d'arguments pour execvp() *****************************************************************************/ #include "ash.h" /***************************************************************************** RemoveSeparators() ------------------------------------------------------------------------------ Input: une chaine de carcteres Process: enleve les blancs et Tab en tete et en fin et ne laisse qu'un seul espace entre chaque composant de la ligne Output: / *****************************************************************************/ void RemoveSeparators(char *pszArgs) { char *pszTemp = (char *)NULL; int i = 0,j = 0; pszTemp = (char *)malloc(strlen(pszArgs) + 1); if(pszTemp == (char *)NULL) raise(SIGME); strcpy(pszTemp,pszArgs); while((pszTemp[i] == ' ' || pszTemp[i] == '\t') && pszTemp[i] != 0) i++; while(pszTemp[i] != 0) { while(pszTemp[i] != ' ' && pszTemp[i] != '\t' && pszTemp[i] != 0) { pszArgs[j] = pszTemp[i]; i++; j++; } while((pszTemp[i] == ' ' || pszTemp[i] == '\t') && pszTemp[i] != 0) i++; if(pszTemp[i] != 0) { pszArgs[j] = ' '; j++; } } pszArgs[j] = 0; free(pszTemp); } /***************************************************************************** ConvertArgs() ------------------------------------------------------------------------------ Input: pszArgs: une ligne de commande Args pointeur sur un tableau de char * NbreMaxArgs: la taille de ce tableau - 1 (dernier pointeur mis a NULL par la fonction) Process: separation des differents composants de la ligne dans les differentes strings du tableau Output: / *****************************************************************************/ void ConvertArgs(char *pszArgs,char *Args[],int NbreMaxArgs) { int Cpt = 0,Fini = 0,i,j; RemoveSeparators(pszArgs); i = 0; while(!Fini) { Args[Cpt] = (char *)malloc(strlen(pszArgs) + 1); if(Args[Cpt] == (char *)NULL) raise(SIGME); j=0; while(pszArgs[i] != ' ' && pszArgs[i] != 0) { Args[Cpt][j] = pszArgs[i]; i++; j++; } Args[Cpt][j] = 0; if(pszArgs[i] == 0) Fini = 1; else { Cpt++; if(Cpt == NbreMaxArgs) Fini = 1; i++; } } }