Advertisement
LucaVinci110898

PathLinux/es11.c

Mar 8th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.85 KB | None | 0 0
  1. #include <string.h>
  2. #include "es11.h"
  3.  
  4. int strcomp(char str1[], char str2[]) {
  5.   int i=0;
  6.   while(str1[i] != '\0' && str2[i] != '\0' && str1[i]==str2[i])
  7.     i++;
  8.   return str1[i] - str2[i];
  9. }
  10.  
  11. void strconcat(char dest[],char percorso[]) {
  12.   int i;
  13.     int offset = strlen(dest);
  14.     for(i = 0; i <= strlen(percorso); i++)
  15.       dest[offset+i] = percorso[i];
  16. }
  17.  
  18. int cerca_stringa(char testo[], char stringa[], int ind) {
  19.   int c,I,i;
  20.   c = 0;
  21.   I = ind;
  22.   i = 0;
  23.   /* Controlla se la stringa da cercare è una stringa nulla,
  24.   se vero restituisce la posizione da cui comincia a cercare */
  25.   if(strcomp(stringa,"") == 0 && ind >= strlen(testo))
  26.     return ind;
  27.   /* Controlla se l'indice è maggiore del testo o se la stringa
  28.   da cercare è più grande del testo o se l'indice è minire di 0 */
  29.   if(strlen(testo) < ind || strlen(stringa) > strlen(testo) || ind < 0){
  30.     return -1;
  31.   }
  32.   while(stringa[i] != '\0' && testo[I] != '\0'){
  33.     if(stringa[i] == testo[I]){
  34.       c = I;
  35.       i ++;
  36.     }
  37.     else {
  38.       I = I - i;
  39.       i = 0;
  40.       c = 0;
  41.     }
  42.     I ++;
  43.   }
  44.   /* Se i è uguale alla lunghezza della stringa allora una porla è stata trovata, altrimenti non è stata trovata */
  45.   if(strlen(stringa) == i){
  46.     return (c-i)+1;
  47.   }
  48.   else
  49.     return -1;
  50. }
  51.  
  52. void rimuovi_current_directory(char percorso[]) {
  53.   int i = 0;
  54.   int j,c;
  55.   while(percorso[i] != '\0'){
  56.     /* Verifica se dopo un . trovato c'è un altro . */
  57.     if(percorso[i] == '.' && percorso[i + 1] == '.'){
  58.       i = i + 2;
  59.     }
  60.     /* Verifica se prima di un . c'è un / e anche dopo */
  61.     if(percorso[i] == '.' && percorso[i + 1] == '/' && percorso[i - 1] == '/'){
  62.       j = i;
  63.       while(percorso[j] != '\0'){
  64.         percorso[j] = percorso[j + 2];
  65.         percorso[j+1] = percorso[j + 3];
  66.         j++;
  67.       }
  68.       i = i - 1;
  69.     }
  70.     /**/
  71.     if(percorso[i] == '.' && percorso[i + 1] == '/' && percorso[i - 1] != '/'){
  72.       if(i == 0){
  73.         c = i;
  74.         while(percorso[c] != '\0'){
  75.           percorso[c] = percorso[c + 2];
  76.           c++;
  77.         }
  78.         i = i - 1;
  79.       }
  80.     }
  81.     /* Controlla se il carattere finale è un . */
  82.     if(percorso[i] == '.' && percorso[i + 1] == '\0' ){
  83.       if(i == 0){
  84.         percorso[i] = percorso[i + 1];
  85.       }
  86.       else {
  87.       j = i;
  88.       percorso[j - 1] = percorso[j+1];
  89.       }
  90.     }
  91.     i ++;
  92.   }
  93. }
  94.  
  95. int rimuovi_parent_directory(char percorso[]) {
  96.   int i = 0;
  97.   int k = 0;
  98.   int j = 0;
  99.   int c = 0;
  100.   int f = 0;
  101.   while(percorso[i] != '\0'){
  102.     if(percorso[i] == '.' && percorso[i + 1] == '.' && percorso[i - 1] == '/' ){
  103.       if(i == 1)
  104.         return 0;
  105.       j = i-2;
  106.       while(percorso[j] != '/'){
  107.         j --;
  108.       }
  109.       k = j;
  110.       f = j;
  111.       if(j == 0 && percorso[i + 2] == '\0'){
  112.         k = j + 1;
  113.       }
  114.       c = i;
  115.       while(percorso[j] != '\0'){
  116.         percorso[k] = percorso[c+2];
  117.         j++;
  118.         k++;
  119.         c++;
  120.       }
  121.       i = f;
  122.     }
  123.     i ++;
  124.   }
  125.   return 1;
  126. }
  127.  
  128. int percorso_assoluto(char cwd[], char percorso[], char destinazione[]) {
  129.   int i = 0;
  130.   int res;
  131.   if(percorso[0] != '/'){
  132.     while(cwd[i] != '\0'){
  133.       destinazione[i] = cwd[i];
  134.       i++;
  135.     }
  136.     destinazione[i] = '/';
  137.     destinazione[i + 1] = '\0';
  138.     strconcat(destinazione,percorso);
  139.     rimuovi_current_directory(destinazione);
  140.     res = rimuovi_parent_directory(destinazione);
  141.     rimuovi_parent_directory(destinazione);
  142.     if(res == 0)
  143.       return 0;
  144.     else
  145.       return 1;
  146.   }
  147.   else{
  148.     while(percorso[i] != '\0'){
  149.       destinazione[i] = percorso[i];
  150.       i++;
  151.     }
  152.     destinazione[i] = '\0';
  153.     rimuovi_current_directory(destinazione);
  154.     res = rimuovi_parent_directory(destinazione);
  155.     rimuovi_parent_directory(destinazione);
  156.     if(res == 0)
  157.       return 0;
  158.     else
  159.       return 1;
  160.   }
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement