[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Additional patch for NetBSD/sandpoint(kurobox)



かわうち@夏休みの宿題再提出、です。
こんにちは。

fictitious disklabel生成時に(やはり)バグがありました _o_

sys/arch/sandpoint/sandpoint/disksubr.cのreaddisklabel()の中でlp->d_partitions
[2].p_size, lp->d_partitions[2].p_offsetのエンディアンによる
入れ替えを忘れていました。

該当部分のみのdiff -uはこのようになります(正式なパッチ形式でなくてすみませ
ん)。
------- 8< -------- 8< -------- 8< -------- 8< -------- 8< -------- 8< ------
                                cyl = MBR_PCYL(dp->mbrp_scyl, dp->mbrp_ssect);

                                /* update disklabel with details */
-                               lp->d_partitions[2].p_size =
-                                   dp->mbrp_size;
-                               lp->d_partitions[2].p_offset =
-                                   dp->mbrp_start;
+                               if (f_endian) {
+                                       lp->d_partitions[2].p_size =
+                                           bswap32(dp->mbrp_size);
+                                       lp->d_partitions[2].p_offset =
+                                           bswap32(dp->mbrp_start);
+                               }
+                               else {
+                                       lp->d_partitions[2].p_size =
+                                           dp->mbrp_size;
+                                       lp->d_partitions[2].p_offset =
+                                           dp->mbrp_start;
+                               }
 #if 0
                                if (lp->d_ntracks != dp->mbrp_ehd + 1 ||
                                    lp->d_nsectors != DPSECT(dp->mbrp_esect)) {
------- 8< -------- 8< -------- 8< -------- 8< -------- 8< -------- 8< ------

(余談)パーティションテーブルはDOS由来なのだからELに統一して欲しいのだけれど
      玄箱でフォーマットしたディスクはEBなので仕方なく...

--
Eiji Kawauchi