summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/isobuilder.cpp35
1 files changed, 8 insertions, 27 deletions
diff --git a/lib/isobuilder.cpp b/lib/isobuilder.cpp
index cf900d7..9bec34c 100644
--- a/lib/isobuilder.cpp
+++ b/lib/isobuilder.cpp
@@ -185,10 +185,10 @@ int isobuilder::DirTree::maxlevel(int current_level) {
}
int isobuilder::DirTree::buildpath(Byte * data, int size, bool bigendian) {
- int maxlv = maxlevel(), i, R, cumul = 0;
+ int maxlv = maxlevel(), i, R, cumul = 0, n = 1;
for (i = 1; i < maxlv; i++) {
- R = buildpath_r(data, size, 1, i, bigendian);
+ R = buildpath_r(&n, data, size, 1, i, bigendian);
data += R;
cumul += R;
}
@@ -196,14 +196,14 @@ int isobuilder::DirTree::buildpath(Byte * data, int size, bool bigendian) {
return cumul;
}
-int isobuilder::DirTree::buildpath_r(Byte * data, int size, int current_level, int level_to_dump, bool bigendian) throw (GeneralException) {
+int isobuilder::DirTree::buildpath_r(int * n, Byte * data, int size, int current_level, int level_to_dump, bool bigendian) throw (GeneralException) {
int N, r = 0, tr;
Uint16 pn;
char pbuf[256], pad;
if (!dir) {
if (brother) {
- return brother->buildpath_r(data, size, current_level, level_to_dump, bigendian);
+ return brother->buildpath_r(n, data, size, current_level, level_to_dump, bigendian);
} else {
return 0;
}
@@ -211,7 +211,6 @@ int isobuilder::DirTree::buildpath_r(Byte * data, int size, int current_level, i
if (current_level == level_to_dump) {
if (!father) {
- numerate(1);
N = 1;
pbuf[0] = 0;
pn = 1;
@@ -221,6 +220,8 @@ int isobuilder::DirTree::buildpath_r(Byte * data, int size, int current_level, i
pn = father->node;
}
+ node = (*n)++;
+
pad = N & 1;
size -= (r = N + pad + 8);
@@ -239,14 +240,14 @@ int isobuilder::DirTree::buildpath_r(Byte * data, int size, int current_level, i
}
if (child) {
- tr = child->buildpath_r(data, size, current_level + 1, level_to_dump, bigendian);
+ tr = child->buildpath_r(n, data, size, current_level + 1, level_to_dump, bigendian);
r += tr;
size -= tr;
data += tr;
}
if (brother) {
- tr = brother->buildpath_r(data, size, current_level, level_to_dump, bigendian);
+ tr = brother->buildpath_r(n, data, size, current_level, level_to_dump, bigendian);
r += tr;
size -= tr;
data += tr;
@@ -404,26 +405,6 @@ void isobuilder::DirTree::setbasicsxa() {
xa_form1 = true;
}
-int isobuilder::DirTree::numerate(int n) {
- if (!dir) {
- if (brother) {
- return brother->numerate(n);
- } else {
- return n;
- }
- }
-
- node = n++;
-
- if (brother)
- n = brother->numerate(n);
-
- if (child)
- n = child->numerate(n);
-
- return n;
-}
-
isobuilder::DirTree * isobuilder::DirTree::Father() {
return father;
}