Beispiel #1
0
void pfs_channel_free( pfs_size_t start )
{
	struct entry *e = head;

	do {
		if(e->start==start) {
			e->inuse=0;
			if( (e->prev->start < e->start) && !e->prev->inuse) {
				struct entry *f = e->prev;
				f->length += e->length;
				entry_delete(e);
				e = f;
			}
			if( (e->next->start>e->start) && !e->next->inuse) {
				struct entry *f = e->next;
				f->start = e->start;
				f->length += e->length;
				entry_delete(e);
				e = f;
			}
			return;
		}
		e = e->next;
	} while(e!=head);
}
//deletes entry from current state and snapshots
entry* purge(char key[MAX_KEY], entry *entryHead, snapshot *snapHead) {
	//remove entry from current state
	entry *unwantedEntry = get_entry(entryHead, key);
	if (unwantedEntry != NULL) {
		entryHead = entry_delete(entryHead, unwantedEntry);	
	}
	
	//remove entry from each snapshot
	snapshot *currentSnap = snapHead;
	while (currentSnap != NULL) {
		unwantedEntry = get_entry(currentSnap->entries, key);
		if (unwantedEntry != NULL) {
			currentSnap->entries = entry_delete(currentSnap->entries, unwantedEntry);
		}
		currentSnap = currentSnap->next;
	}
		
	printf("ok\n");

	return entryHead;
}
//deletes an entry from the list which stores the given key
entry* del(entry *entryHead, char key[MAX_KEY]) {
	entry *unwantedEntry = get_entry(entryHead, key);
	
	if (unwantedEntry == NULL) {
		printf("no such key\n");
		return entryHead;
	}
	else {
		printf("ok\n");
		return entry_delete(entryHead, unwantedEntry);	
	}
}