Esempio n. 1
0
File: tst_clt.c Progetto: iveney/cts
int main(int argc, char * argv[]){
	FILE *ifp,*ofp; 
	if(argc > 3 || argc < 2)
		report_exit("error: command inputfile");
	ifp = fopen(argv[1], "r") ; 
	ofp = fopen(argv[2], "w") ; 
	if( InputFile(ifp) != 1 )
		report_exit("Error reading file");

	char buf[80];
	int i;
	FILE * pFig = fopen("cluster.fig","w");

	// start to test
	preprocess_block(&blockage);
	preprocess_sinks(&sink);
	construct_g_all(&blockage,&sink);
	all_pair_shortest();

	cluster_sinks(&blockage,&sink);

	draw_case(pFig);
	draw_link_sink(pFig);

	free_clusters();
	free_all();
	return 0;
}
int main(int argc, char** argv) {
    int LCS_threshold=0,n=0,i=0,j=0;
    char clustername[10];
    create_cluster();
    display_clusters();
    printf("NC_LCS=%d",((int)large_cluster(cnode)));
    printf("\nEnter the LCS threshold:");
    scanf("%d",&LCS_threshold);
    printf("\nEnter the cluster name:");
    scanf("%s",clustername);
    n=num_of_clusters;
    for(i=0;i<n;i++)
    {
       if((strcmp((cnode+i)->cname,clustername)==0))
       {
           for(j=0;j<((cnode+i)->num_of_pages);j++)
           {
               
               printf("\n%s",(((cnode+i)->pagelink)+j)->pname);
           }
       }
        
    }
  
    free_clusters();


    return (EXIT_SUCCESS);
}
Esempio n. 3
0
int main(int argc, char** argv) {
    uint8_t *image_buf;
    int fd;
    struct bpb33* bpb;
    if (argc < 2) {
        usage(argv[0]);
    }

    image_buf = mmap_file(argv[1], &fd);
    bpb = check_bootsector(image_buf);
    traverse_root(image_buf, bpb);
    foster_orphans(image_buf, bpb);

    free_clusters();
    free(bpb);
    unmmap_file(image_buf, &fd);
    return 0;
}
Esempio n. 4
0
File: fs.c Progetto: mukadr/ghostfs
static int remove_entry(struct ghostfs *gfs, const char *path, bool is_dir)
{
	struct dir_iter link, it;
	int ret;

	ret = dir_iter_lookup(gfs, &link, path, false);
	if (ret < 0)
		return ret;

	if (link.entry == &gfs->root_entry)
		return -EINVAL;

	if (is_dir != dir_entry_is_directory(link.entry))
		return is_dir ? -ENOTDIR : -EISDIR;

	// no clusters, we are done
	if (!link.entry->cluster)
		goto unlink;

	ret = dir_iter_init(gfs, &it, link.entry->cluster);
	if (ret < 0)
		return ret;

	// make sure directory is empty
	if (is_dir) {
		if (dir_entry_used(it.entry))
			return -ENOTEMPTY;

		ret = dir_iter_next_used(&it);
		if (ret != -ENOENT)
			return ret == 0 ? -ENOTEMPTY : ret;
	}

	free_clusters(gfs, it.cluster);
unlink:
	link.entry->filename[0] = '\0';
	cluster_set_dirty(link.cluster, true);

	return 0;
}
Esempio n. 5
0
void check_file_length(uint16_t cluster, uint8_t *image_buf, struct bpb33* bpb)
{
    struct direntry *dirent;
    int d, i;
    dirent = (struct direntry*) cluster_to_addr(cluster, image_buf, bpb);
    int clust_size = bpb->bpbBytesPerSec * bpb->bpbSecPerClust;

    while (1) {
        for (d = 0; d < clust_size; d += sizeof(struct direntry)) {
            char name[9];
            char extension[4];
            uint32_t size;
            uint16_t file_cluster;
            name[8] = ' ';
            extension[3] = ' ';
            memcpy(name, &(dirent->deName[0]), 8);
            memcpy(extension, dirent->deExtension, 3);

            if (name[0] == SLOT_EMPTY)
                return;

            /* skip over deleted entries */
            if (((uint8_t)name[0]) == SLOT_DELETED)
                continue;

            /* names are space padded - remove the spaces */
            for (i = 8; i > 0; i--) {
                if (name[i] == ' ')
                    name[i] = '\0';
                else
                    break;
            }

            /* remove the spaces from extensions */
            for (i = 3; i > 0; i--) {
                if (extension[i] == ' ')
                    extension[i] = '\0';
                else
                    break;
            }

            /* don't print "." or ".." directories */
            if (strcmp(name, ".") == 0) {
                dirent++;
                continue;
            }
            if (strcmp(name, "..") == 0) {
                dirent++;
                continue;
            }

            if ((dirent->deAttributes & ATTR_VOLUME) != 0) {
                continue;
            } else if ((dirent->deAttributes & ATTR_DIRECTORY) != 0) {
                file_cluster = getushort(dirent->deStartCluster);
                check_file_length(file_cluster, image_buf, bpb);
            } else {
                size = getulong(dirent->deFileSize);
                file_cluster = getushort(dirent->deStartCluster);
                uint16_t fat_size_clusters = get_file_length(file_cluster, image_buf, bpb);

                uint32_t size_clusters = (size + (clust_size - 1)) / clust_size;
                uint32_t fat_size = fat_size_clusters * clust_size;
                if (size_clusters != fat_size_clusters) {
                    printf("%s.%s %u %u\n", name, extension, size, fat_size);

                    uint16_t begin_cluster = file_cluster + size_clusters - 1;
                    uint16_t end_cluster = file_cluster + fat_size_clusters;
                    free_clusters(begin_cluster, end_cluster, image_buf, bpb);
                }
            }

            dirent++;
        }

        /* We've reached the end of the cluster for this directory. Where's the next cluster? */
        if (cluster == 0) {
            // root dir is special
            dirent++;
        } else {
            cluster = get_fat_entry(cluster, image_buf, bpb);
            dirent = (struct direntry*) cluster_to_addr(cluster, image_buf, bpb);
        }
    }
}
Esempio n. 6
0
File: fs.c Progetto: mukadr/ghostfs
static int do_truncate(struct ghostfs *gfs, struct dir_iter *it, off_t new_size)
{
	int ret;
	int count;
	int next;
	struct cluster *c = NULL;

	if (new_size < 0)
		return -EINVAL;

	if (new_size > FILESIZE_MAX)
		return -EFBIG;

	if (dir_entry_is_directory(it->entry))
		return -EISDIR;

	next = it->entry->cluster;
	count = size_to_clusters(min(it->entry->size, new_size));

	if (count) {
		ret = cluster_at(gfs, next, count - 1, &c);
		if (ret < 0)
			return ret;

		next = c->hdr.next;
	}

	if (new_size > it->entry->size) {
		int alloc;
		long used = it->entry->size % CLUSTER_DATA;

		// zero remaining cluster space
		if (used) {
			memset(c->data + used, 0, CLUSTER_DATA - used);
			cluster_set_dirty(c, true);
		}

		alloc = size_to_clusters(new_size) - count;
		if (alloc) {
			ret = alloc_clusters(gfs, alloc, NULL, true);
			if (ret < 0)
				return ret;

			if (c) {
				c->hdr.next = ret;
				cluster_set_dirty(c, true);
			} else {
				it->entry->cluster = ret;
			}
		}
	} else if (new_size < it->entry->size) {
		if (next) {
			if (c) {
				c->hdr.next = 0;
				cluster_set_dirty(c, true);
			}

			ret = cluster_get(gfs, next, &c);
			if (ret < 0)
				return ret;

			free_clusters(gfs, c);
		}
	}

	dir_entry_set_size(it->entry, new_size, false);
	cluster_set_dirty(it->cluster, true);

	return 0;
}
Esempio n. 7
0
File: fs.c Progetto: mukadr/ghostfs
static int create_entry(struct ghostfs *gfs, const char *path, bool is_dir,
		struct dir_entry **entry)
{
	struct dir_iter it;
	struct cluster *prev = NULL, *next = NULL;
	const char *name;
	int cluster_nr = 0;
	int ret;

	ret = dir_iter_lookup(gfs, &it, path, true);
	if (ret < 0)
		return ret;

	if (!dir_entry_is_directory(it.entry))
		return -ENOTDIR;

	name = last_component(path);
	if (strlen(name) > FILENAME_SIZE - 1)
		return -ENAMETOOLONG;

	if (!name[0])
		return -EINVAL;

	if (dir_contains(gfs, it.entry->cluster, name) == 0)
		return -EEXIST;

	ret = find_empty_entry(gfs, &it, it.entry->cluster);
	if (ret < 0) {
		int nr;

		if (ret != -ENOENT)
			return ret;

		nr = alloc_clusters(gfs, 1, &next, true);
		if (nr < 0)
			return nr;

		prev = it.cluster;
		find_empty_entry(gfs, &it, nr);

		prev->hdr.next = nr;
		cluster_set_dirty(prev, true);
	}

	if (is_dir) {
		cluster_nr = alloc_clusters(gfs, 1, NULL, true);
		if (cluster_nr < 0) {
			if (next) {
				free_clusters(gfs, next);
				prev->hdr.next = 0;
			}
			return cluster_nr;
		}
	}

	strcpy(it.entry->filename, name);
	dir_entry_set_size(it.entry, 0, is_dir);
	it.entry->cluster = cluster_nr;
	cluster_set_dirty(it.cluster, true);

	if (entry)
		*entry = it.entry;

	return 0;
}