Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string.h>
- #include "es11.h"
- int strcomp(char str1[], char str2[]) {
- int i=0;
- while(str1[i] != '\0' && str2[i] != '\0' && str1[i]==str2[i])
- i++;
- return str1[i] - str2[i];
- }
- void strconcat(char dest[],char percorso[]) {
- int i;
- int offset = strlen(dest);
- for(i = 0; i <= strlen(percorso); i++)
- dest[offset+i] = percorso[i];
- }
- int cerca_stringa(char testo[], char stringa[], int ind) {
- int c,I,i;
- c = 0;
- I = ind;
- i = 0;
- /* Controlla se la stringa da cercare è una stringa nulla,
- se vero restituisce la posizione da cui comincia a cercare */
- if(strcomp(stringa,"") == 0 && ind >= strlen(testo))
- return ind;
- /* Controlla se l'indice è maggiore del testo o se la stringa
- da cercare è più grande del testo o se l'indice è minire di 0 */
- if(strlen(testo) < ind || strlen(stringa) > strlen(testo) || ind < 0){
- return -1;
- }
- while(stringa[i] != '\0' && testo[I] != '\0'){
- if(stringa[i] == testo[I]){
- c = I;
- i ++;
- }
- else {
- I = I - i;
- i = 0;
- c = 0;
- }
- I ++;
- }
- /* Se i è uguale alla lunghezza della stringa allora una porla è stata trovata, altrimenti non è stata trovata */
- if(strlen(stringa) == i){
- return (c-i)+1;
- }
- else
- return -1;
- }
- void rimuovi_current_directory(char percorso[]) {
- int i = 0;
- int j,c;
- while(percorso[i] != '\0'){
- /* Verifica se dopo un . trovato c'è un altro . */
- if(percorso[i] == '.' && percorso[i + 1] == '.'){
- i = i + 2;
- }
- /* Verifica se prima di un . c'è un / e anche dopo */
- if(percorso[i] == '.' && percorso[i + 1] == '/' && percorso[i - 1] == '/'){
- j = i;
- while(percorso[j] != '\0'){
- percorso[j] = percorso[j + 2];
- percorso[j+1] = percorso[j + 3];
- j++;
- }
- i = i - 1;
- }
- /**/
- if(percorso[i] == '.' && percorso[i + 1] == '/' && percorso[i - 1] != '/'){
- if(i == 0){
- c = i;
- while(percorso[c] != '\0'){
- percorso[c] = percorso[c + 2];
- c++;
- }
- i = i - 1;
- }
- }
- /* Controlla se il carattere finale è un . */
- if(percorso[i] == '.' && percorso[i + 1] == '\0' ){
- if(i == 0){
- percorso[i] = percorso[i + 1];
- }
- else {
- j = i;
- percorso[j - 1] = percorso[j+1];
- }
- }
- i ++;
- }
- }
- int rimuovi_parent_directory(char percorso[]) {
- int i = 0;
- int k = 0;
- int j = 0;
- int c = 0;
- int f = 0;
- while(percorso[i] != '\0'){
- if(percorso[i] == '.' && percorso[i + 1] == '.' && percorso[i - 1] == '/' ){
- if(i == 1)
- return 0;
- j = i-2;
- while(percorso[j] != '/'){
- j --;
- }
- k = j;
- f = j;
- if(j == 0 && percorso[i + 2] == '\0'){
- k = j + 1;
- }
- c = i;
- while(percorso[j] != '\0'){
- percorso[k] = percorso[c+2];
- j++;
- k++;
- c++;
- }
- i = f;
- }
- i ++;
- }
- return 1;
- }
- int percorso_assoluto(char cwd[], char percorso[], char destinazione[]) {
- int i = 0;
- int res;
- if(percorso[0] != '/'){
- while(cwd[i] != '\0'){
- destinazione[i] = cwd[i];
- i++;
- }
- destinazione[i] = '/';
- destinazione[i + 1] = '\0';
- strconcat(destinazione,percorso);
- rimuovi_current_directory(destinazione);
- res = rimuovi_parent_directory(destinazione);
- rimuovi_parent_directory(destinazione);
- if(res == 0)
- return 0;
- else
- return 1;
- }
- else{
- while(percorso[i] != '\0'){
- destinazione[i] = percorso[i];
- i++;
- }
- destinazione[i] = '\0';
- rimuovi_current_directory(destinazione);
- res = rimuovi_parent_directory(destinazione);
- rimuovi_parent_directory(destinazione);
- if(res == 0)
- return 0;
- else
- return 1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement