IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Buffer ou Pointeur?


Sujet :

C

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut Buffer ou Pointeur?
    Bonjour,

    Je débute dans le langage C et je dois modifier un code. J'essaie de comprendre mais là je sais plus où j'en suis à quoi correspond cette déclaration ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    t_buffer *ligne;
     
    {
    	ligne->lg = 0;
     
     
    	for (;;)
    ...
    Je déclare un pointeur ou un buffer? S'il s'agit d'un buffer, connaissez vous un tutoriel où un sujet qui explique bien comment les utiliser?

    Après recherche je trouve cette définition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    struct {
    	int fd;
    	t_buffer *buf;
    	int nbbuf;
    	z_stream *zstr;
    	int alreadycompressed;
    } connexion[4];
    Je pense qu'il s'agit donc d'une déclaration de structure, donc en gros je déclare un pointeur ligne qui est du type de ma structure c'est ça?

    Dernière question je cherche à récupérer une variable ligne->buf, et à la mettre dans un buffer, comment utiliser un buffer?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Cherche la définition du type t_buffer, pour commencer.

    Le morceau de code que tu as posté est en fait la déclaration d'un tableau de 4 structures anonymes; le tableau lui-même étant nommé "connexion".
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Cherche la définition du type t_buffer, pour commencer.

    Le morceau de code que tu as posté est en fait la déclaration d'un tableau de 4 structures anonymes; le tableau lui-même étant nommé "connexion".
    Voici la définition du type t_buffer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct { char *buf; int lg; } t_buffer;

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    C'est donc une structure contenant apparemment un buffer et un entier indiquant la longueur.
    Le genre de chose que j'éviterais d'allouer sur le tas, en fait: On se retrouve avec deux niveaux de pointeurs pour pas grand-chose.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Et ben oui mais c'est pas mon code je dois le modifier ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    int litligne(c,ligne)
    int c;
    t_buffer *ligne;
     
    {
    	ligne->lg = 0;
     
     
    	for (;;)
    	{
    		int i;
     
    		while (connexion[c].nbbuf)
    		{
    			/* Recherche l'eventuel saut de ligne */
    			for (i = 0; i < ((t_buffer*)connexion[c].buf)->lg; i++)
    			{
    				if (((t_buffer*)connexion[c].buf)->buf[i] == 0x0A)
    				{
    					i++;
    					break;
    				}
    			}
    			/* Copier un bloc complet ou partiel ? */
    			if (i == ((t_buffer*)connexion[c].buf)->lg)
    			{
    				Add(&ligne->buf,&ligne->lg,((t_buffer*)connexion[c].buf)->buf,i);
    				free(((t_buffer*)connexion[c].buf)->buf);
    				Remove(&connexion[c].buf,&connexion[c].nbbuf,sizeof(t_buffer));
    				TRACE0("Copie Bloc complet \n");
    			}
    			else
    			{
    			TRACE0("Copie Bloc partiel \n");
     
    				Add(&ligne->buf,&ligne->lg,((t_buffer*)connexion[c].buf)->buf,i);
    				Remove(&((t_buffer*)connexion[c].buf)->buf,&((t_buffer*)connexion[c].buf)->lg,i);
    			}
     
    			/* Sort si ligne trouvee */
    			if (ligne && ligne->buf[ligne->lg-1] == 0x0A)
    			{
    				char tmp = 0;
     
    				tmp = 0;
     
    				Add(&ligne->buf,&ligne->lg,&tmp,1);
    				ligne->lg--; /* On ne comptabilise pas le 0 terminateur */
     
    				if ( strstr (ligne->buf,"Argument --") != NULL )
    				{
     
    					ligne->buf[ligne->lg-2] = ' '; 
    					ligne->buf[ligne->lg-3] = ' ';
    					ligne->lg = 0;  
    					TRACE2("litligne test -- (%d) => %s.... \n",c,ligne->buf);
    					return 1;
     
    				}
    				else
    				{
    					TRACE2("litligne(%d) => %s.... \n",c,ligne->buf);/**/
     
                                            return 1;
                                    }
                            }
                    }
     
                    /* Attend la suite */
    		if (!sendrcv())
    		{
    			ligne->lg = 0;
    			return 0;
    		}
    	}
    }
    Selon moi il faut que je le fasse dans cette fonction ...
    Je veux récupérer dans un buffer (mais je ne sais pas trop comment ça fonctionne, si tu as un cours ou un tutoriel sur les buffers je suis preneuse ...) un arguement qui je pense est contenu dans ligne->buf et je veux le compléter au fur et à mesure de la boucle puis ensuite l'afficher.

    J'ai fait quelque chose dans ce style là mais sans grand succès je suis entrain de me replonger dans un tutoriel sur les pointeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    int litligne(c,ligne)
    int c;
    t_buffer *ligne;
    t_buffer monbuf;   //ou t_buffer monbuf = NULL; ou t_buffer monbuf = NULL_BUFFER;
    {
    	ligne->lg = 0;
     
     
    	for (;;)
    	{
    		int i;
     
    		while (connexion[c].nbbuf)
    		{
    			/* Recherche l'eventuel saut de ligne */
    			for (i = 0; i < ((t_buffer*)connexion[c].buf)->lg; i++)
    			{
    				if (((t_buffer*)connexion[c].buf)->buf[i] == 0x0A)
    				{
    					i++;
    					break;
    				}
    			}
    			/* Copier un bloc complet ou partiel ? */
    			if (i == ((t_buffer*)connexion[c].buf)->lg)
    			{
    				Add(&ligne->buf,&ligne->lg,((t_buffer*)connexion[c].buf)->buf,i);
    				free(((t_buffer*)connexion[c].buf)->buf);
    				Remove(&connexion[c].buf,&connexion[c].nbbuf,sizeof(t_buffer));
    				TRACE0("Copie Bloc complet \n");
    			}
    			else
    			{
    			TRACE0("Copie Bloc partiel \n");
            monbuf.buf = Strcat(monbuf.buf,ligne->buf);
    				Add(&ligne->buf,&ligne->lg,((t_buffer*)connexion[c].buf)->buf,i);
    				Remove(&((t_buffer*)connexion[c].buf)->buf,&((t_buffer*)connexion[c].buf)->lg,i);
    			}
     
    			/* Sort si ligne trouvee */
    			if (ligne && ligne->buf[ligne->lg-1] == 0x0A)
    			{
    				char tmp = 0;
     
    				tmp = 0;
     
    				Add(&ligne->buf,&ligne->lg,&tmp,1);
    				ligne->lg--; /* On ne comptabilise pas le 0 terminateur */
     
    				if ( strstr (ligne->buf,"Argument --") != NULL )
    				{
     
    					ligne->buf[ligne->lg-2] = ' '; 
    					ligne->buf[ligne->lg-3] = ' ';
    					ligne->lg = 0;  
    					TRACE2("litligne test -- (%d) => %s.... \n",c,ligne->buf);
    					return 1;
     
    				}
    				else
    				{
    					TRACE2("litligne(%d) => %s.... \n",c,ligne->buf);/**/
                                            TRACE1("MON BUF %c", monbuf.buf);
                                            return 1;
                                    }
                            }
                    }
     
                    /* Attend la suite */
    		if (!sendrcv())
    		{
    			ligne->lg = 0;
    			return 0;
    		}
    	}
    }

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Ooh, du C K&R, ça faisait un bail que je n'en avais pas vu.

    Déjà, je pense que tu peux virer les casts en (t_buffer*) : Ils sont inutiles et on y verra plus clair.

    Ensuite, je serais curieux de voir les fonctions Add() et Remove(), qui m'ont l'air de ne pas bosser sur la même chose: Les renommer pourrait être un pas vers la maintenabilité.

    Enfin, j'aimerais que tu me dises en quoi consiste la modification demandée:
    • Le comportement actuel de la fonction
    • Le comportement différent attendu.


    PS: Aussi, le code manque un peu de commentaires, de mises à NULL de pointeurs et d'assertions.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre chevronné Avatar de Jenna
    Inscrit en
    Décembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2009
    Messages : 272
    Par défaut
    C'est autorisé cà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int litligne(c,ligne)
    int c;
    t_buffer *ligne;
    t_buffer monbuf;   //ou t_buffer monbuf = NULL; ou t_buffer monbuf = NULL_BUFFER;
    {
    ...
    Il y a une variable locale (monbuf) qui est définie avant l'accolade ouvrante. Je croyait qu'avant l'accolade ouvrante on ne trouvait que les définitions des paramètres.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Alors euh Jenna, je ne sais pas ce qui est autorisé je débute en C c'est moi qui ai mis ce code avant l'accolade ouvrante je savais pas je vais l'enlever et repartir sur le code principal.

    Quand tu dis virer les cast (t_buffer*) ce sont ces cast là? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    free(((t_buffer*)connexion[c].buf)->buf);
    Voici les fonctions Add et Remove :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    void Add(buf,lgbuf,str,lgstr)
    char **buf;
    int *lgbuf;
    char *str;
    int lgstr;
    {
    	if (!buf ||!lgbuf || !str || !lgstr)
    	return;
    	(*buf) = (char*)realloc(*buf,(*lgbuf)+lgstr);
    	memcpy(&(*buf)[*lgbuf],str,lgstr);
    	(*lgbuf) += lgstr;
    }
     
    void Remove(buf,lgbuf,lg)
    char **buf;
    int *lgbuf;
    int lg;
    {
    	if (!buf ||!lgbuf || !lg)
    	return;
    	memcpy(*buf,*buf+lg,*lgbuf-lg);
    	(*lgbuf) -= lg;
    	(*buf) = (char*)realloc(*buf,(*lgbuf));
    }
    En fait ce programme est un firewall qui permet d'autoriser ou non le passage d'un commit. Pour cela il vérifie un argument qui je pense se trouve derrière Je voudrais dans la boucle récupérer l'argument, le stocker dans un buffer, et le compléter au fur et à mesure (il peut être sur plusieurs lignes) et je voudrais pour tester l'afficher.
    En effet quand je modifie ce document cela modifie mon .log et c'est là que je vois apparaître mes modifications.

    Voilà j'espère que j'ai été claire

    Du coup où dois je déclarer ma variable qui va récupérer tout ça ???

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Citation Envoyé par juju1988 Voir le message
    C'est quoi du C K&R?
    Ce que moi j'appelle "C K&R", c'est la toute première version du C, où les paramètres d'une fonction étaient déclarés comme ils le sont dans ce code.
    Quand tu dis virer les cast (t_buffer*) ce sont ces cast là? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    free(((t_buffer*)connexion[c].buf)->buf);
    Oui.

    OK, j'ai vu le code et ça m'a permis de mieux voir certaines choses.
    Mais c'est quand même pas mal confus pour moi...
    Par exemple, le code utilise des fonctions de manipulation de chaînes de caractères C (qui doivent être terminées par un caractère nul), mais les fonctions Add et Remove semblent travailler sur des données brutes et ne s'assurent pas de la présence de caractère nul à la fin...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Je ne sais pas quoi te dire, je n'ai pas écris ce code j'essaie juste désespéremment de le modifier

    J'ai enlevé les cast tout va bien rien ne plante

    Sais tu comment et où je peux déclarer une variable de type chaîne et à quel endroit dois je lui ajouter mon argument ... ??

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Je vous remet la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    int litligne(c,ligne)
    int c;
    t_buffer *ligne;
    {
    	ligne->lg = 0;
     
    	for (;;)
    	{
    		int i;
     
    		while (connexion[c].nbbuf)
    		{
    			/* Recherche l'eventuel saut de ligne */
    			for (i = 0; i < (connexion[c].buf)->lg; i++)
    			{
    				if ((connexion[c].buf)->buf[i] == 0x0A)
    				{
    					i++;
    					break;
    				}
    			}
    			/* Copier un bloc complet ou partiel ? */
    			if (i == (connexion[c].buf)->lg)
    			{
    				Add(&ligne->buf,&ligne->lg,(connexion[c].buf)->buf,i);
    				free((connexion[c].buf)->buf);
    				Remove(&connexion[c].buf,&connexion[c].nbbuf,sizeof(t_buffer));
    				TRACE0("Copie Bloc complet \n");
    			}
    			else
    			{
    			  TRACE0("Copie Bloc partiel \n");
    				Add(&ligne->buf,&ligne->lg,(connexion[c].buf)->buf,i);
    				Remove(&(connexion[c].buf)->buf,&(connexion[c].buf)->lg,i);
    			}
     
    			/* Sort si ligne trouvee */
    			if (ligne && ligne->buf[ligne->lg-1] == 0x0A)
    			{
    				char tmp = 0;
     
    				tmp = 0;
     
    				Add(&ligne->buf,&ligne->lg,&tmp,1);
    				ligne->lg--; /* On ne comptabilise pas le 0 terminateur */
     
    				if ( strstr (ligne->buf,"Argument --") != NULL )
    				{
    					ligne->buf[ligne->lg-2] = ' '; 
    					ligne->buf[ligne->lg-3] = ' ';
    					ligne->lg = 0;  
    					TRACE2("litligne test -- (%d) => %s.... \n",c,ligne->buf);
    					return 1;
     
    				}
    				else
    				{
    					TRACE2("litligne(%d) => %s.... \n",c,ligne->buf);/**/
              
                                            return 1;
                                    }
                            }
                            
                    }
     
                    /* Attend la suite */
    		if (!sendrcv())
    		{
    			ligne->lg = 0;
    			return 0;
    		}
    	}
    }
    Je pense que l'argument que je veux récupérer se situe dans ligne->buf mais je n'en suis pas sûre (comment vérifier? A quel endroit dans le code?).
    J'aimerai déclarer un variable (quelle est la mieux placée pour ça??) qui me permettent de récupérer mon argument et de le compléter au fur et à mesure qu'il se modifie dans mon code... Je pense qu'il se modifie au niveau du commentaire "Copie d'un bloc partiel" ... est ce bien le cas ...

    Voici mon fichier .log où les modifications apparaissent si ça peut vous aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    Copie Bloc partiel 
    litligne(0) => BEGIN AUTH REQUEST
    .... 
    Copie Bloc partiel 
    litligne(0) => /cvs/baseref
    .... 
    Copie Bloc partiel 
    litligne(0) => nomduserveur\loginuser
    .... 
    Copie Bloc partiel 
    litligne(0) => A`9 edhcdoQoKoK
    .... 
    Copie Bloc complet 
    litligne(0) => END AUTH REQUEST
    .... 
    UTF-8 password avant : motdepasse
    UTF-8 password_utf8 : motdepasse
    LOG : select cvs from users left join profils using (profil_id) where login='login'
    GetRightsFromSQL: Regle 'D+'
    GetRightsFromSQL: Regle 'O^(ci|co|update|diff|log|rlog|add|remove|status|rdiff|annotate)$'
    GetRightsFromSQL: Regle 'O^(rtag|tag)$'
    GetRightsFromSQL: Regle 'O^(import|admin|export|history|login|logout)$'
    GetRightsFromSQL: Regle 'O^(release|watch-(on|off|add|remove)|watchers|editors|init)$'
    Etablissement d'une connexion sortante vers nomduserveur
    Connection sortante vers nomduserveur = 4
    EnvoieBuf(3)=> BEGIN AUTH REQUEST
    /cvs/baseref
    loginuser
    A`9 edhcdoQoKoK
    END AUTH REQUEST
     
    Copie Bloc complet 
    litligne(2) => I LOVE YOU
    .... 
    EnvoieBuf(1)=> I LOVE YOU
     
    Copie Bloc partiel 
    litligne(0) => Valid-responses ok error Valid-requests Checked-in New-entry Checksum Copy-file Updated Created Update-existing Merged Patched Rcs-diff Update-baserev Mode Mod-time Removed Renamed Remove-entry Set-static-directory Clear-static-directory Set-sticky Clear-sticky Template Notified Module-expansion Wrapper-rcsOption Clear-rename Rename EntriesExtra M Mbinary E F MT
    .... 
    FOLLOW : Z 
    EnvoieBuf(3)=> Valid-responses ok error Valid-requests Checked-in New-entry Checksum Copy-file Updated Created Update-existing Merged Patched Rcs-diff Update-baserev Mode Mod-time Removed Renamed Remove-entry Set-static-directory Clear-static-directory Set-sticky Clear-sticky Template Notified Module-expansion Wrapper-rcsOption Clear-rename Rename EntriesExtra M Mbinary E F MT
     
    Copie Bloc complet 
    litligne(0) => valid-requests
    .... 
    FOLLOW : Z 
    EnvoieBuf(3)=> valid-requests
     
    FOLLOW : / 
    Copie Bloc partiel 
    litligne(2) => Valid-requests Root Valid-responses valid-requests Repository Directory Max-dotdot Static-directory Sticky Checkin-prog Update-prog Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Questionable Case Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set expand-modules ci co update diff log add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors init annotate noop
    .... 
    FOLLOW : Z 
    EnvoieBuf(1)=> Valid-requests Root Valid-responses valid-requests Repository Directory Max-dotdot Static-directory Sticky Checkin-prog Update-prog Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Questionable Case Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set expand-modules ci co update diff log add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors init annotate noop
     
    Copie Bloc complet 
    litligne(2) => ok
    .... 
    FOLLOW : Z 
    EnvoieBuf(1)=> ok
     
    FOLLOW : / 
    Copie Bloc complet 
    litligne(0) => UseUnchanged
    .... 
    FOLLOW : Z 
    EnvoieBuf(3)=> UseUnchanged
     
    Copie Bloc complet 
    litligne(0) => Root /cvs/baseref
    .... 
    FOLLOW : Z 
    EnvoieBuf(3)=> Root /cvs/baseref
     
    Copie Bloc partiel 
    litligne(0) => Global_option -r
    .... 
    FOLLOW : Z 
    EnvoieBuf(3)=> Global_option -r
     
    Copie Bloc partiel 
    litligne(0) => Case
    .... 
    FOLLOW : Z 
    EnvoieBuf(3)=> Case
     
    Copie Bloc partiel 
    litligne(0) => Argument -m
    .... 
    FOLLOW : A 
    FOLLOW : Z 
    EnvoieBuf(3)=> Argument -m
     
    Copie Bloc partiel 
    litligne(0) => Argument Attention
    .... 
    FOLLOW : A 
    FOLLOW : Z 
    EnvoieBuf(3)=> Argument Attention
     
    Copie Bloc partiel 
    litligne(0) => Argumentx Ce n'est pas un commit
    .... 
    FOLLOW : X 
    FOLLOW : Z 
    EnvoieBuf(3)=> Argumentx Ce n'est pas un commit
     
    Copie Bloc partiel 
    litligne(0) => Argumentx Fiche de livraison ERRONEE
    .... 
    FOLLOW : X 
    FOLLOW : Z 
    EnvoieBuf(3)=> Argumentx Fiche de livraison ERRONEE
     
    Copie Bloc partiel 
    litligne test -- (0) => Argument   
    .... 
    FOLLOW : A 
    FOLLOW : Z 
    Copie Bloc partiel 
    litligne(0) => Directory .
    .... 
    FOLLOW : D 
    Copie Bloc partiel 
    litligne(0) => /cvs/baseref/SamplesGCL/TestGCL
    .... 
    Nouveau repertoire courant: /cvs/baseref/SamplesGCL/TestGCL
    FOLLOW : Z 
    EnvoieBuf(3)=> Directory .
    /cvs/baseref/SamplesGCL/TestGCL
     
    Copie Bloc partiel 
    litligne(0) => Sticky TTRUNC
    .... 
    FOLLOW : Z 
    EnvoieBuf(3)=> Sticky TTRUNC
     
    Copie Bloc partiel 
    litligne(0) => Entry /test.txt/1.8///TTRUNC
    .... 
    FOLLOW : e 
    Check 'e'
    >check_dirfile(/cvs/baseref/SamplesGCL/TestGCL/test.txt)
    >check_dirfile: ALLOWED
    FOLLOW : z 
    EnvoieBuf(3)=> Entry /test.txt/1.8///TTRUNC
     
    Copie Bloc partiel 
    litligne(0) => Checkin-time 1 Mar 2010 08:35:50 -0000
    .... 
    FOLLOW : H 
    Check In Time: Checkin-time 1 Mar 2010 08:35:50 -0000
     
    Copie Bloc partiel 
    litligne(0) => Modified test.txt
    .... 
    FOLLOW : a 
    Check 'a'
    >check_dirfile(/cvs/baseref/SamplesGCL/TestGCL/test.txt)
    >check_dirfile: ALLOWED
    FOLLOW : m 
    Copie Bloc partiel 
    litligne(0) => u=rw,g=rw,o=rw
    .... 
    EnvoieBuf(3)=> Checkin-time 1 Mar 2010 08:35:50 -0000
     
    EnvoieBuf(3)=> Modified test.txt
    u=rw,g=rw,o=rw
     
    Copie Bloc partiel 
    litligne(0) => 137
    .... 
    relaiebuf(0,3,137)
    Je suis passée par un déplacement d'un éventuel bloc partiel 
    Copie Bloc partiel 
    litligne(0) => Argument test.txt
    .... 
    FOLLOW : A 
    FOLLOW : Z 
    EnvoieBuf(3)=> Argument test.txt
     
    Copie Bloc complet 
    litligne(0) => ci
    .... 
    FOLLOW : o 
    Le paramètre est : -m 
    Le paramètre est :    
    SOUS FOLLOW : + 
    Check 'o'/'+'
    >check_dirfile(/cvs/baseref/SamplesGCL/TestGCL/  )
    >check_dirfile: ALLOWED
    Le paramètre est : test.txt 
    SOUS FOLLOW : + 
    Check 'o'/'+'
    >check_dirfile(/cvs/baseref/SamplesGCL/TestGCL/test.txt)
    >check_dirfile: ALLOWED
    Ma trace: La Commande est : ci
    >check_order: ALLOWED
    EnvoieBuf(3)=> ci
     
    Copie Bloc complet 
    litligne(2) => E cvs [server aborted]: Message verification failed
    .... 
    FOLLOW : Z 
    EnvoieBuf(1)=> E cvs [server aborted]: Message verification failed
     
    Copie Bloc complet 
    litligne(2) => error  
    .... 
    FOLLOW : Z 
    EnvoieBuf(1)=> error  
     
    FOLLOW : / 
    abort in gereConnexion() - 15 :
    Sortie de fwcvs

Discussions similaires

  1. Buffer de caracteres et pointeur.
    Par BaygonV dans le forum Débuter
    Réponses: 16
    Dernier message: 03/02/2014, 15h46
  2. Aide pointeur buffer et SDL
    Par toumaikimi dans le forum SDL
    Réponses: 3
    Dernier message: 15/07/2010, 21h37
  3. Buffer et pointeurs
    Par bentley71de dans le forum C
    Réponses: 3
    Dernier message: 09/08/2008, 12h42
  4. Incrémenter un pointeur sur un buffer de uchar
    Par Flo. dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 12/12/2005, 08h38
  5. Alpha blending et Z-buffer directx 8
    Par Cesar4 dans le forum DirectX
    Réponses: 1
    Dernier message: 23/05/2002, 12h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo