Nel corso della sua esecuzione la funzione verifica:
- che ci sia spazio sufficiente a effettuarla, controllando il valore della free list degli inode: tale valore infatti è impostato a 0 se non c'è più spazio a disposizione nel vfs
- che il path di destinazione non sia malformato e ne controlla la validità
- che nella cartella di destinazione non ci sia un file con lo stesso nome che avrà il file copiato
- che il file da copiare non sia troppo grande (ossia più grande dei blocchi del vfs)
- che il path di destinazione non sia un file
- che la cartella in cui si tenta di copiare il file non abbia raggiunto il limite massimo di elementi contenuti
La copia vera e propria, viene effettuata dalla funzione insert_file_fs2vd: viene letto il file nel buffer, e vengono allocati un blocco, in cui viene scritto il contenuto del buffer, e un i-node per il nuovo file, che viene completato con i valori corretti. A questo punto viene aggiunta una entry alla directory table della cartella destinazione, avente come campo name il nome del file (ricavato dal path sorgente), e come campo i-node l'offset del nuovo i-node allocato. Viene aggiornato anche il campo size dell'i-node della suddetta directory (ora contiene infatti un file in più).
Lorenzo Baloci, Daniele Turato, Alessio Zennaro
- Settembre 2006