Exemple #1
0
/* @param cluster: cluster number
 * @param buffer: the buffer to store the cluster
 * @param cluster size: cluster size in sectors
 */
static inline void cluster_read(int cluster, char *buffer, int cluster_size,
        struct fat_part_desc *desc)
{
    int i, sect;

    sect = cluster_to_sector(cluster, desc);
    for (i = 0; i < cluster_size; ++i, ++sect)
        block_read_lba(sect, buffer + (i * 512));
}
Exemple #2
0
Fichier : DF.C Projet : FDOS/defrag
void setlast(int disk, int *track, int *head, int sysonly)
{
int i;
struct DEVICEPARAMS dp;
long fatsector,lastsec;
int secsfat,datasec;
unsigned int nclusters;
unsigned short maxcluster;

    if ((i = disk_getparams(disk,&dp)) != DISK_OK)
    {
        /* LIB TODO: make a strliberror() function (like strerror()) */
        lib_error("getlast()",i);
        exit(1);
    }

    if (sysonly)
    {
        datasec = data_sector(&dp);
        physical(track,NULL,head,datasec,dp.hidden_sectors,dp.secs_track,
                 dp.num_heads);
        printf("System extends to track %d, side %d (logical sector %d).\n",
               MaxTrack,MaxHead,datasec);
        return;
    }

    nclusters = num_clusters(&dp);
    fatsector = dp.reserved_secs;
    secsfat = dp.secs_fat;
    maxcluster = searchfat12(disk,(unsigned short)nclusters,
                             fatsector,secsfat,0);
    if (maxcluster == 0)
        die("There seems to be no data on the disk in ","%c:.",disk+'A');

    datasec = data_sector(&dp);
    lastsec = cluster_to_sector(maxcluster,datasec,dp.secs_cluster);
    lastsec += (dp.secs_cluster-1);

    physical(track,NULL,head,lastsec,dp.hidden_sectors,dp.secs_track,
             dp.num_heads);

    printf("Last allocated cluster, %u, is on ",maxcluster);
    printf("track %d, side %d.\n",MaxTrack,MaxHead);
}