--- rpl/src/instructions_d4.c 2010/03/04 10:17:50 1.4 +++ rpl/src/instructions_d4.c 2010/03/06 18:29:07 1.5 @@ -50,6 +50,8 @@ instruction_delete(struct_processus *s_e struct stat requete; + unsigned char *nom; + unsigned long unite; (*s_etat_processus).erreur_execution = d_ex; @@ -94,10 +96,18 @@ instruction_delete(struct_processus *s_e if ((*s_objet_argument).type == CHN) { - if (stat((unsigned char *) (*s_objet_argument).objet, - &requete) != 0) + if ((nom = transliteration(s_etat_processus, + (unsigned char *) (*s_objet_argument).objet, + d_locale, "UTF-8")) == NULL) + { + liberation(s_etat_processus, s_objet_argument); + return; + } + + if (stat(nom, &requete) != 0) { liberation(s_etat_processus, s_objet_argument); + free(nom); (*s_etat_processus).erreur_execution = d_ex_erreur_acces_fichier; @@ -106,10 +116,10 @@ instruction_delete(struct_processus *s_e if (S_ISREG(requete.st_mode)) // Fichier régulier { - if ((fichier = fopen((unsigned char *) - (*s_objet_argument).objet, "r+")) == NULL) + if ((fichier = fopen(nom, "r+")) == NULL) { liberation(s_etat_processus, s_objet_argument); + free(nom); (*s_etat_processus).erreur_execution = d_ex_erreur_acces_fichier; @@ -124,6 +134,8 @@ instruction_delete(struct_processus *s_e if (fcntl(fileno(fichier), F_GETLK, &lock) == -1) { + free(nom); + if (fclose(fichier) != 0) { liberation(s_etat_processus, s_objet_argument); @@ -143,29 +155,30 @@ instruction_delete(struct_processus *s_e if (lock.l_type != F_UNLCK) { liberation(s_etat_processus, s_objet_argument); + free(nom); (*s_etat_processus).erreur_execution = d_ex_erreur_acces_fichier; return; } - erreur = caracteristiques_fichier(s_etat_processus, - (unsigned char *) (*s_objet_argument).objet, + erreur = caracteristiques_fichier(s_etat_processus, nom, &existence, &ouverture, &unite); if ((erreur != d_absence_erreur) || (ouverture == d_vrai)) { liberation(s_etat_processus, s_objet_argument); + free(nom); (*s_etat_processus).erreur_execution = d_ex_erreur_acces_fichier; return; } - if (destruction_fichier((unsigned char *) - (*s_objet_argument).objet) == d_erreur) + if (destruction_fichier(nom) == d_erreur) { liberation(s_etat_processus, s_objet_argument); + free(nom); (*s_etat_processus).erreur_execution = d_ex_erreur_acces_fichier; @@ -174,15 +187,18 @@ instruction_delete(struct_processus *s_e } else // Socket { - if (unlink((unsigned char *) (*s_objet_argument).objet) != 0) + if (unlink(nom) != 0) { liberation(s_etat_processus, s_objet_argument); + free(nom); (*s_etat_processus).erreur_execution = d_ex_erreur_acces_fichier; return; } } + + free(nom); } else {