OSDN Git Service

* src/dhuf.c (encode_c_dyn): Refined by DANGAN (reported on the
authorarai <arai@6a8cc165-1e22-0410-a132-eb4e3f353aba>
Sat, 29 Jun 2002 02:49:41 +0000 (02:49 +0000)
committerarai <arai@6a8cc165-1e22-0410-a132-eb4e3f353aba>
Sat, 29 Jun 2002 02:49:41 +0000 (02:49 +0000)
LHa BBS [30], [39], [62])

git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/lha/lha/trunk@251 6a8cc165-1e22-0410-a132-eb4e3f353aba

src/dhuf.c

index 263ce0f..dfdcfda 100644 (file)
@@ -253,14 +253,16 @@ encode_c_dyn(c)
        do {
                bits >>= 1;
                if (p & 1) {
-                       bits |= 0x8000;
-               }
-               if (++cnt == 16) {
-                       putcode(16, bits);
-                       cnt = bits = 0;
+                       bits |= 0x80000000L;
                }
+               cnt++;
        } while ((p = parent[p]) != ROOT_C);
-       putcode(cnt, bits);
+       if (cnt <= 16) {
+               putcode(cnt, bits >> 16);
+       } else {
+               putcode(16, bits >> 16);
+               putbits(cnt - 16, bits);
+       }
        if (d >= 0)
                putbits(8, d);
        update_c(c);