From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IIrYe-0006i1-DP for qemu-devel@nongnu.org; Wed, 08 Aug 2007 15:51:04 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IIrYd-0006hp-PA for qemu-devel@nongnu.org; Wed, 08 Aug 2007 15:51:04 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IIrYd-0006hm-JB for qemu-devel@nongnu.org; Wed, 08 Aug 2007 15:51:03 -0400 Received: from wa-out-1112.google.com ([209.85.146.182]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IIrYc-0005SZ-T2 for qemu-devel@nongnu.org; Wed, 08 Aug 2007 15:51:03 -0400 Received: by wa-out-1112.google.com with SMTP id k22so310768waf for ; Wed, 08 Aug 2007 12:50:59 -0700 (PDT) Message-ID: <59abf66e0708081250g44f97283u7e070ee119069b92@mail.gmail.com> Date: Wed, 8 Aug 2007 16:50:57 -0300 From: "=?ISO-8859-1?Q?Jorge_Luc=E1ngeli_Obes?=" In-Reply-To: <59abf66e0708081121s56fc2c01vb762850b6f5eeb7a@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_131038_8404136.1186602657997" References: <59abf66e0708081121s56fc2c01vb762850b6f5eeb7a@mail.gmail.com> Subject: [Qemu-devel] [PATCH 1/4][RFC] Allow storing arbitrary annotations in qcow2 images Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org ------=_Part_131038_8404136.1186602657997 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline This patch adds an extra 'annot' field to qcow2 snapshots, and updates serialization functions. Signed-off-by: Jorge Luc=E1ngeli Obes --- diff --git a/qemu/block-qcow2.c b/qemu/block-qcow2.c index 0f7a069..361d300 100644 --- a/qemu/block-qcow2.c +++ b/qemu/block-qcow2.c @@ -106,6 +106,8 @@ typedef struct QCowSnapshot { uint32_t l1_size; char *id_str; char *name; + char *annot; + uint32_t vm_state_size; uint32_t date_sec; uint32_t date_nsec; @@ -1370,6 +1372,7 @@ static void qcow_free_snapshots(BlockDriverState *bs) for(i =3D 0; i < s->nb_snapshots; i++) { qemu_free(s->snapshots[i].name); qemu_free(s->snapshots[i].id_str); + qemu_free(s->snapshots[i].annot); } qemu_free(s->snapshots); s->snapshots =3D NULL; @@ -1401,12 +1404,18 @@ static int qcow_read_snapshots(BlockDriverState *bs= ) sn->date_sec =3D be32_to_cpu(h.date_sec); sn->date_nsec =3D be32_to_cpu(h.date_nsec); sn->vm_clock_nsec =3D be64_to_cpu(h.vm_clock_nsec); - extra_data_size =3D be32_to_cpu(h.extra_data_size); + extra_data_size =3D be32_to_cpu(h.extra_data_size); id_str_size =3D be16_to_cpu(h.id_str_size); name_size =3D be16_to_cpu(h.name_size); + sn->annot =3D qemu_malloc(extra_data_size + 1); + if (!sn->annot) + goto fail; + if (bdrv_pread(s->hd, offset, sn->annot, extra_data_size) !=3D extra_data_size) + goto fail; offset +=3D extra_data_size; + sn->annot[extra_data_size] =3D '\0'; sn->id_str =3D qemu_malloc(id_str_size + 1); if (!sn->id_str) @@ -1439,7 +1448,7 @@ static int qcow_write_snapshots(BlockDriverState *bs) QCowSnapshotHeader h; int i, name_size, id_str_size, snapshots_size; uint64_t data64; - uint32_t data32; + uint32_t data32, extra_data_size; int64_t offset, snapshots_offset; /* compute the size of the snapshots */ @@ -1448,6 +1457,7 @@ static int qcow_write_snapshots(BlockDriverState *bs) sn =3D s->snapshots + i; offset =3D align_offset(offset, 8); offset +=3D sizeof(h); + offset +=3D strlen(sn->annot); offset +=3D strlen(sn->id_str); offset +=3D strlen(sn->name); } @@ -1455,7 +1465,7 @@ static int qcow_write_snapshots(BlockDriverState *bs) snapshots_offset =3D alloc_clusters(bs, snapshots_size); offset =3D snapshots_offset; - + for(i =3D 0; i < s->nb_snapshots; i++) { sn =3D s->snapshots + i; memset(&h, 0, sizeof(h)); @@ -1465,7 +1475,9 @@ static int qcow_write_snapshots(BlockDriverState *bs) h.date_sec =3D cpu_to_be32(sn->date_sec); h.date_nsec =3D cpu_to_be32(sn->date_nsec); h.vm_clock_nsec =3D cpu_to_be64(sn->vm_clock_nsec); - + + extra_data_size =3D strlen(sn->annot); + h.extra_data_size =3D cpu_to_be32(extra_data_size); id_str_size =3D strlen(sn->id_str); name_size =3D strlen(sn->name); h.id_str_size =3D cpu_to_be16(id_str_size); @@ -1474,6 +1486,9 @@ static int qcow_write_snapshots(BlockDriverState *bs) if (bdrv_pwrite(s->hd, offset, &h, sizeof(h)) !=3D sizeof(h)) goto fail; offset +=3D sizeof(h); + if (bdrv_pwrite(s->hd, offset, sn->annot, extra_data_size) !=3D extra_data_size) + goto fail; + offset +=3D extra_data_size; if (bdrv_pwrite(s->hd, offset, sn->id_str, id_str_size) !=3D id_st= r_size) goto fail; offset +=3D id_str_size; @@ -1570,6 +1585,10 @@ static int qcow_snapshot_create(BlockDriverState *bs= , sn->name =3D qemu_strdup(sn_info->name); if (!sn->name) goto fail; + sn->annot =3D qemu_strdup(sn_info->annot); + if (!sn->annot) + goto fail; + sn->vm_state_size =3D sn_info->vm_state_size; sn->date_sec =3D sn_info->date_sec; sn->date_nsec =3D sn_info->date_nsec; @@ -1680,6 +1699,8 @@ static int qcow_snapshot_delete(BlockDriverState *bs, const char *snapshot_id) qemu_free(sn->id_str); qemu_free(sn->name); + qemu_free(sn->annot); + memmove(sn, sn + 1, (s->nb_snapshots - snapshot_index - 1) * sizeof(*s= n)); s->nb_snapshots--; ret =3D qcow_write_snapshots(bs); @@ -1707,10 +1728,14 @@ static int qcow_snapshot_list(BlockDriverState *bs, for(i =3D 0; i < s->nb_snapshots; i++) { sn_info =3D sn_tab + i; sn =3D s->snapshots + i; + pstrcpy(sn_info->id_str, sizeof(sn_info->id_str), sn->id_str); pstrcpy(sn_info->name, sizeof(sn_info->name), sn->name); + pstrcpy(sn_info->annot, sizeof(sn_info->annot), + sn->annot); + sn_info->vm_state_size =3D sn->vm_state_size; sn_info->date_sec =3D sn->date_sec; sn_info->date_nsec =3D sn->date_nsec; diff --git a/qemu/vl.h b/qemu/vl.h index 43f56bd..f0273fd 100644 --- a/qemu/vl.h +++ b/qemu/vl.h @@ -589,6 +589,7 @@ typedef struct QEMUSnapshotInfo { /* the following fields are informative. They are not needed for the consistency of the snapshot */ char name[256]; /* user choosen name */ + char annot[1024]; /* extra info, will be used to store command-line parameters */ uint32_t vm_state_size; /* VM state info size */ uint32_t date_sec; /* UTC date of the snapshot */ uint32_t date_nsec; @@ -631,6 +632,7 @@ int bdrv_pread(BlockDriverState *bs, int64_t offset, int bdrv_pwrite(BlockDriverState *bs, int64_t offset, const void *buf, int count); int bdrv_truncate(BlockDriverState *bs, int64_t offset); + int64_t bdrv_getlength(BlockDriverState *bs); void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr); int bdrv_commit(BlockDriverState *bs); @@ -714,6 +716,12 @@ void path_combine(char *dest, int dest_size, const char *base_path, const char *filename); +/* annotations */ +int bdrv_snapshot_annotated(QEMUSnapshotInfo *sn_info); +int bdrv_set_annot(BlockDriverState *bs, const char *name, + const char *annotation); +char *bdrv_get_annot(BlockDriverState *bs, const char *name); + #ifndef QEMU_TOOL typedef void QEMUMachineInitFunc(int ram_size, int vga_ram_size, ------=_Part_131038_8404136.1186602657997 Content-Type: text/x-patch; name=image-annot.patch; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f545agnz Content-Disposition: attachment; filename="image-annot.patch" VGhpcyBwYXRjaCBhZGRzIGFuIGV4dHJhICdhbm5vdCcgZmllbGQgdG8gcWNvdzIgc25hcHNob3Rz LCBhbmQgdXBkYXRlcwpzZXJpYWxpemF0aW9uIGZ1bmN0aW9ucy4KClNpZ25lZC1vZmYtYnk6IEpv cmdlIEx1Y8OhbmdlbGkgT2JlcyA8dDRtNXluQGdtYWlsLmNvbT4KLS0tCmRpZmYgLS1naXQgYS9x ZW11L2Jsb2NrLXFjb3cyLmMgYi9xZW11L2Jsb2NrLXFjb3cyLmMKaW5kZXggMGY3YTA2OS4uMzYx ZDMwMCAxMDA2NDQKLS0tIGEvcWVtdS9ibG9jay1xY293Mi5jCisrKyBiL3FlbXUvYmxvY2stcWNv dzIuYwpAQCAtMTA2LDYgKzEwNiw4IEBAIHR5cGVkZWYgc3RydWN0IFFDb3dTbmFwc2hvdCB7CiAg ICAgdWludDMyX3QgbDFfc2l6ZTsKICAgICBjaGFyICppZF9zdHI7CiAgICAgY2hhciAqbmFtZTsK KyAgICBjaGFyICphbm5vdDsKKwogICAgIHVpbnQzMl90IHZtX3N0YXRlX3NpemU7CiAgICAgdWlu dDMyX3QgZGF0ZV9zZWM7CiAgICAgdWludDMyX3QgZGF0ZV9uc2VjOwpAQCAtMTM3MCw2ICsxMzcy LDcgQEAgc3RhdGljIHZvaWQgcWNvd19mcmVlX3NuYXBzaG90cyhCbG9ja0RyaXZlclN0YXRlICpi cykKICAgICBmb3IoaSA9IDA7IGkgPCBzLT5uYl9zbmFwc2hvdHM7IGkrKykgewogICAgICAgICBx ZW11X2ZyZWUocy0+c25hcHNob3RzW2ldLm5hbWUpOwogICAgICAgICBxZW11X2ZyZWUocy0+c25h cHNob3RzW2ldLmlkX3N0cik7CisgICAgICAgIHFlbXVfZnJlZShzLT5zbmFwc2hvdHNbaV0uYW5u b3QpOwogICAgIH0KICAgICBxZW11X2ZyZWUocy0+c25hcHNob3RzKTsKICAgICBzLT5zbmFwc2hv dHMgPSBOVUxMOwpAQCAtMTQwMSwxMiArMTQwNCwxOCBAQCBzdGF0aWMgaW50IHFjb3dfcmVhZF9z bmFwc2hvdHMoQmxvY2tEcml2ZXJTdGF0ZSAqYnMpCiAgICAgICAgIHNuLT5kYXRlX3NlYyA9IGJl MzJfdG9fY3B1KGguZGF0ZV9zZWMpOwogICAgICAgICBzbi0+ZGF0ZV9uc2VjID0gYmUzMl90b19j cHUoaC5kYXRlX25zZWMpOwogICAgICAgICBzbi0+dm1fY2xvY2tfbnNlYyA9IGJlNjRfdG9fY3B1 KGgudm1fY2xvY2tfbnNlYyk7Ci0gICAgICAgIGV4dHJhX2RhdGFfc2l6ZSA9IGJlMzJfdG9fY3B1 KGguZXh0cmFfZGF0YV9zaXplKTsKIAorICAgICAgICBleHRyYV9kYXRhX3NpemUgPSBiZTMyX3Rv X2NwdShoLmV4dHJhX2RhdGFfc2l6ZSk7CiAgICAgICAgIGlkX3N0cl9zaXplID0gYmUxNl90b19j cHUoaC5pZF9zdHJfc2l6ZSk7CiAgICAgICAgIG5hbWVfc2l6ZSA9IGJlMTZfdG9fY3B1KGgubmFt ZV9zaXplKTsKIAorICAgICAgICBzbi0+YW5ub3QgPSBxZW11X21hbGxvYyhleHRyYV9kYXRhX3Np emUgKyAxKTsKKyAgICAgICAgaWYgKCFzbi0+YW5ub3QpCisgICAgICAgICAgICBnb3RvIGZhaWw7 CisgICAgICAgIGlmIChiZHJ2X3ByZWFkKHMtPmhkLCBvZmZzZXQsIHNuLT5hbm5vdCwgZXh0cmFf ZGF0YV9zaXplKSAhPSBleHRyYV9kYXRhX3NpemUpCisgICAgICAgICAgICBnb3RvIGZhaWw7CiAg ICAgICAgIG9mZnNldCArPSBleHRyYV9kYXRhX3NpemU7CisgICAgICAgIHNuLT5hbm5vdFtleHRy YV9kYXRhX3NpemVdID0gJ1wwJzsKIAogICAgICAgICBzbi0+aWRfc3RyID0gcWVtdV9tYWxsb2Mo aWRfc3RyX3NpemUgKyAxKTsKICAgICAgICAgaWYgKCFzbi0+aWRfc3RyKQpAQCAtMTQzOSw3ICsx NDQ4LDcgQEAgc3RhdGljIGludCBxY293X3dyaXRlX3NuYXBzaG90cyhCbG9ja0RyaXZlclN0YXRl ICpicykKICAgICBRQ293U25hcHNob3RIZWFkZXIgaDsKICAgICBpbnQgaSwgbmFtZV9zaXplLCBp ZF9zdHJfc2l6ZSwgc25hcHNob3RzX3NpemU7CiAgICAgdWludDY0X3QgZGF0YTY0OwotICAgIHVp bnQzMl90IGRhdGEzMjsKKyAgICB1aW50MzJfdCBkYXRhMzIsIGV4dHJhX2RhdGFfc2l6ZTsKICAg ICBpbnQ2NF90IG9mZnNldCwgc25hcHNob3RzX29mZnNldDsKIAogICAgIC8qIGNvbXB1dGUgdGhl IHNpemUgb2YgdGhlIHNuYXBzaG90cyAqLwpAQCAtMTQ0OCw2ICsxNDU3LDcgQEAgc3RhdGljIGlu dCBxY293X3dyaXRlX3NuYXBzaG90cyhCbG9ja0RyaXZlclN0YXRlICpicykKICAgICAgICAgc24g PSBzLT5zbmFwc2hvdHMgKyBpOwogICAgICAgICBvZmZzZXQgPSBhbGlnbl9vZmZzZXQob2Zmc2V0 LCA4KTsKICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihoKTsKKyAgICAgICAgb2Zmc2V0ICs9IHN0 cmxlbihzbi0+YW5ub3QpOwogICAgICAgICBvZmZzZXQgKz0gc3RybGVuKHNuLT5pZF9zdHIpOwog ICAgICAgICBvZmZzZXQgKz0gc3RybGVuKHNuLT5uYW1lKTsKICAgICB9CkBAIC0xNDU1LDcgKzE0 NjUsNyBAQCBzdGF0aWMgaW50IHFjb3dfd3JpdGVfc25hcHNob3RzKEJsb2NrRHJpdmVyU3RhdGUg KmJzKQogCiAgICAgc25hcHNob3RzX29mZnNldCA9IGFsbG9jX2NsdXN0ZXJzKGJzLCBzbmFwc2hv dHNfc2l6ZSk7CiAgICAgb2Zmc2V0ID0gc25hcHNob3RzX29mZnNldDsKLSAgICAKKwogICAgIGZv cihpID0gMDsgaSA8IHMtPm5iX3NuYXBzaG90czsgaSsrKSB7CiAgICAgICAgIHNuID0gcy0+c25h cHNob3RzICsgaTsKICAgICAgICAgbWVtc2V0KCZoLCAwLCBzaXplb2YoaCkpOwpAQCAtMTQ2NSw3 ICsxNDc1LDkgQEAgc3RhdGljIGludCBxY293X3dyaXRlX3NuYXBzaG90cyhCbG9ja0RyaXZlclN0 YXRlICpicykKICAgICAgICAgaC5kYXRlX3NlYyA9IGNwdV90b19iZTMyKHNuLT5kYXRlX3NlYyk7 CiAgICAgICAgIGguZGF0ZV9uc2VjID0gY3B1X3RvX2JlMzIoc24tPmRhdGVfbnNlYyk7CiAgICAg ICAgIGgudm1fY2xvY2tfbnNlYyA9IGNwdV90b19iZTY0KHNuLT52bV9jbG9ja19uc2VjKTsKLSAg ICAgICAgCisKKyAgICAgICAgZXh0cmFfZGF0YV9zaXplID0gc3RybGVuKHNuLT5hbm5vdCk7Cisg ICAgICAgIGguZXh0cmFfZGF0YV9zaXplID0gY3B1X3RvX2JlMzIoZXh0cmFfZGF0YV9zaXplKTsK ICAgICAgICAgaWRfc3RyX3NpemUgPSBzdHJsZW4oc24tPmlkX3N0cik7CiAgICAgICAgIG5hbWVf c2l6ZSA9IHN0cmxlbihzbi0+bmFtZSk7CiAgICAgICAgIGguaWRfc3RyX3NpemUgPSBjcHVfdG9f YmUxNihpZF9zdHJfc2l6ZSk7CkBAIC0xNDc0LDYgKzE0ODYsOSBAQCBzdGF0aWMgaW50IHFjb3df d3JpdGVfc25hcHNob3RzKEJsb2NrRHJpdmVyU3RhdGUgKmJzKQogICAgICAgICBpZiAoYmRydl9w d3JpdGUocy0+aGQsIG9mZnNldCwgJmgsIHNpemVvZihoKSkgIT0gc2l6ZW9mKGgpKQogICAgICAg ICAgICAgZ290byBmYWlsOwogICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKGgpOworICAgICAgICBp ZiAoYmRydl9wd3JpdGUocy0+aGQsIG9mZnNldCwgc24tPmFubm90LCBleHRyYV9kYXRhX3NpemUp ICE9IGV4dHJhX2RhdGFfc2l6ZSkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgb2Zm c2V0ICs9IGV4dHJhX2RhdGFfc2l6ZTsKICAgICAgICAgaWYgKGJkcnZfcHdyaXRlKHMtPmhkLCBv ZmZzZXQsIHNuLT5pZF9zdHIsIGlkX3N0cl9zaXplKSAhPSBpZF9zdHJfc2l6ZSkKICAgICAgICAg ICAgIGdvdG8gZmFpbDsKICAgICAgICAgb2Zmc2V0ICs9IGlkX3N0cl9zaXplOwpAQCAtMTU3MCw2 ICsxNTg1LDEwIEBAIHN0YXRpYyBpbnQgcWNvd19zbmFwc2hvdF9jcmVhdGUoQmxvY2tEcml2ZXJT dGF0ZSAqYnMsCiAgICAgc24tPm5hbWUgPSBxZW11X3N0cmR1cChzbl9pbmZvLT5uYW1lKTsKICAg ICBpZiAoIXNuLT5uYW1lKQogICAgICAgICBnb3RvIGZhaWw7CisgICAgc24tPmFubm90ID0gcWVt dV9zdHJkdXAoc25faW5mby0+YW5ub3QpOworICAgIGlmICghc24tPmFubm90KQorICAgICAgICBn b3RvIGZhaWw7CisKICAgICBzbi0+dm1fc3RhdGVfc2l6ZSA9IHNuX2luZm8tPnZtX3N0YXRlX3Np emU7CiAgICAgc24tPmRhdGVfc2VjID0gc25faW5mby0+ZGF0ZV9zZWM7CiAgICAgc24tPmRhdGVf bnNlYyA9IHNuX2luZm8tPmRhdGVfbnNlYzsKQEAgLTE2ODAsNiArMTY5OSw4IEBAIHN0YXRpYyBp bnQgcWNvd19zbmFwc2hvdF9kZWxldGUoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGNvbnN0IGNoYXIg KnNuYXBzaG90X2lkKQogCiAgICAgcWVtdV9mcmVlKHNuLT5pZF9zdHIpOwogICAgIHFlbXVfZnJl ZShzbi0+bmFtZSk7CisgICAgcWVtdV9mcmVlKHNuLT5hbm5vdCk7CisKICAgICBtZW1tb3ZlKHNu LCBzbiArIDEsIChzLT5uYl9zbmFwc2hvdHMgLSBzbmFwc2hvdF9pbmRleCAtIDEpICogc2l6ZW9m KCpzbikpOwogICAgIHMtPm5iX3NuYXBzaG90cy0tOwogICAgIHJldCA9IHFjb3dfd3JpdGVfc25h cHNob3RzKGJzKTsKQEAgLTE3MDcsMTAgKzE3MjgsMTQgQEAgc3RhdGljIGludCBxY293X3NuYXBz aG90X2xpc3QoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsCiAgICAgZm9yKGkgPSAwOyBpIDwgcy0+bmJf c25hcHNob3RzOyBpKyspIHsKICAgICAgICAgc25faW5mbyA9IHNuX3RhYiArIGk7CiAgICAgICAg IHNuID0gcy0+c25hcHNob3RzICsgaTsKKwogICAgICAgICBwc3RyY3B5KHNuX2luZm8tPmlkX3N0 ciwgc2l6ZW9mKHNuX2luZm8tPmlkX3N0ciksCiAgICAgICAgICAgICAgICAgc24tPmlkX3N0cik7 CiAgICAgICAgIHBzdHJjcHkoc25faW5mby0+bmFtZSwgc2l6ZW9mKHNuX2luZm8tPm5hbWUpLAog ICAgICAgICAgICAgICAgIHNuLT5uYW1lKTsKKyAgICAgICAgcHN0cmNweShzbl9pbmZvLT5hbm5v dCwgc2l6ZW9mKHNuX2luZm8tPmFubm90KSwKKyAgICAgICAgICAgICAgICBzbi0+YW5ub3QpOwor CiAgICAgICAgIHNuX2luZm8tPnZtX3N0YXRlX3NpemUgPSBzbi0+dm1fc3RhdGVfc2l6ZTsKICAg ICAgICAgc25faW5mby0+ZGF0ZV9zZWMgPSBzbi0+ZGF0ZV9zZWM7CiAgICAgICAgIHNuX2luZm8t PmRhdGVfbnNlYyA9IHNuLT5kYXRlX25zZWM7CmRpZmYgLS1naXQgYS9xZW11L3ZsLmggYi9xZW11 L3ZsLmgKaW5kZXggNDNmNTZiZC4uZjAyNzNmZCAxMDA2NDQKLS0tIGEvcWVtdS92bC5oCisrKyBi L3FlbXUvdmwuaApAQCAtNTg5LDYgKzU4OSw3IEBAIHR5cGVkZWYgc3RydWN0IFFFTVVTbmFwc2hv dEluZm8gewogICAgIC8qIHRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBpbmZvcm1hdGl2ZS4gVGhl eSBhcmUgbm90IG5lZWRlZCBmb3IKICAgICAgICB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIHNuYXBz aG90ICovCiAgICAgY2hhciBuYW1lWzI1Nl07IC8qIHVzZXIgY2hvb3NlbiBuYW1lICovCisgICAg Y2hhciBhbm5vdFsxMDI0XTsgLyogZXh0cmEgaW5mbywgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIGNv bW1hbmQtbGluZSBwYXJhbWV0ZXJzICovCiAgICAgdWludDMyX3Qgdm1fc3RhdGVfc2l6ZTsgLyog Vk0gc3RhdGUgaW5mbyBzaXplICovCiAgICAgdWludDMyX3QgZGF0ZV9zZWM7IC8qIFVUQyBkYXRl IG9mIHRoZSBzbmFwc2hvdCAqLwogICAgIHVpbnQzMl90IGRhdGVfbnNlYzsKQEAgLTYzMSw2ICs2 MzIsNyBAQCBpbnQgYmRydl9wcmVhZChCbG9ja0RyaXZlclN0YXRlICpicywgaW50NjRfdCBvZmZz ZXQsCiBpbnQgYmRydl9wd3JpdGUoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGludDY0X3Qgb2Zmc2V0 LCAKICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsIGludCBjb3VudCk7CiBpbnQgYmRy dl90cnVuY2F0ZShCbG9ja0RyaXZlclN0YXRlICpicywgaW50NjRfdCBvZmZzZXQpOworCiBpbnQ2 NF90IGJkcnZfZ2V0bGVuZ3RoKEJsb2NrRHJpdmVyU3RhdGUgKmJzKTsKIHZvaWQgYmRydl9nZXRf Z2VvbWV0cnkoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGludDY0X3QgKm5iX3NlY3RvcnNfcHRyKTsK IGludCBiZHJ2X2NvbW1pdChCbG9ja0RyaXZlclN0YXRlICpicyk7CkBAIC03MTQsNiArNzE2LDEy IEBAIHZvaWQgcGF0aF9jb21iaW5lKGNoYXIgKmRlc3QsIGludCBkZXN0X3NpemUsCiAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICpiYXNlX3BhdGgsCiAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpmaWxlbmFtZSk7CiAKKy8qIGFubm90YXRpb25zICovCitpbnQgYmRydl9zbmFwc2hv dF9hbm5vdGF0ZWQoUUVNVVNuYXBzaG90SW5mbyAqc25faW5mbyk7CitpbnQgYmRydl9zZXRfYW5u b3QoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqYW5ub3RhdGlvbik7CitjaGFyICpiZHJ2X2dldF9hbm5vdChCbG9j a0RyaXZlclN0YXRlICpicywgY29uc3QgY2hhciAqbmFtZSk7CisKICNpZm5kZWYgUUVNVV9UT09M CiAKIHR5cGVkZWYgdm9pZCBRRU1VTWFjaGluZUluaXRGdW5jKGludCByYW1fc2l6ZSwgaW50IHZn YV9yYW1fc2l6ZSwgCg== ------=_Part_131038_8404136.1186602657997--