summaryrefslogtreecommitdiff
path: root/src/slices.h
diff options
context:
space:
mode:
authorLudovic Pouzenc <ludovic@pouzenc.fr>2011-02-22 14:41:01 +0000
committerLudovic Pouzenc <ludovic@pouzenc.fr>2011-02-22 14:41:01 +0000
commit319f923c57c640dd35679817924d063e6741b623 (patch)
tree20788d51b9f790f07cef7715437d209045cc755c /src/slices.h
parent78725557a028004d6e03a6ce82856eae282a1a8f (diff)
download2011-ddhardrescue-319f923c57c640dd35679817924d063e6741b623.tar.gz
2011-ddhardrescue-319f923c57c640dd35679817924d063e6741b623.tar.bz2
2011-ddhardrescue-319f923c57c640dd35679817924d063e6741b623.zip
Fonctions des slices terminées, module recovery qui contient l'algo de récupération terminé aussi.
Main minimaliste pour lancer des tests à droite à gauche. Mises au points à coup de valgrind et ddd, ça a l'air presque bien, il reste peut être un bug ou deux dans des cas à la con. La fonction slicesFindLargest est coûteuse. On peut imaginer une version qui prends en argument : - le max potentiellement trouvable (permet d'éliminer plein de parcours dans la majorité des cas vue l'utilisation qui est faite des slices dans le recovery. La fonction retournerai le premier slice qui correspond à cette valeur de maximum. - un pointeur vers le slice à partir duquel commencer la recherche, qui serait le pointeur du slice trouvé la précédente fois. Permet dans le cas général de trouver vite. Il faut quand même reprendre la liste au début jusqu'à ce pointeur si on arrive à la fin de la liste sans avoir trouvé. git-svn-id: file:///var/svn/2011-ddhardrescue/trunk@3 d3078510-dda0-49f1-841c-895ef4b7ec81
Diffstat (limited to 'src/slices.h')
-rwxr-xr-xsrc/slices.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/slices.h b/src/slices.h
index 062c4f4..9f97246 100755
--- a/src/slices.h
+++ b/src/slices.h
@@ -4,8 +4,13 @@
#include <stdint.h>
#include <stdlib.h>
+/* IMPORTANT NOTES
+Slice are inclusive intervals. Let say sliceNew(1,2,S_UNKNOWN,NULL) return a [1;2] interval,
+ so interval lenght is end-begin+1. Here, it is 2 sectors lenght slice.
+*/
+
typedef enum { S_UNKNOWN, S_RECOVERED, S_UNREADABLE } sliceStatus_t;
-typedef uint32_t address_t;
+typedef unsigned long int address_t;
typedef struct _slice {
uint32_t begin, end;
@@ -19,11 +24,11 @@ typedef struct {
} slices_t;
slice_t *sliceNew(address_t begin, address_t end, sliceStatus_t status, slice_t *next);
-int sliceSplit(slice_t *slice, address_t splitAt, sliceStatus_t statusBefore, sliceStatus_t statusAt, sliceStatus_t statusAfter);
+int sliceSplit(slices_t *slices, slice_t *initialSlice, address_t splitAt, sliceStatus_t statusBefore, sliceStatus_t statusAt, sliceStatus_t statusAfter);
slices_t *slicesNew();
void slicesAppend(slices_t *slices, slice_t *slice);
slice_t *slicesFindLargest(slices_t *slices, sliceStatus_t status);
-char *slicesDump(slices_t *slices, int charCount, address_t begin, address_t end);
+char *slicesDump(slices_t *slices, address_t *blockSize, unsigned int charCount, address_t begin, address_t end);
#endif /*SLICES_H*/