From 0885c23f80054c0750260ba448e85bb15c3e4c1f Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Fri, 11 Nov 2022 13:01:55 -0500 Subject: [PATCH 01/17] vere: bumps version --- pkg/urbit/version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/urbit/version b/pkg/urbit/version index cb107be2b..b81620707 100644 --- a/pkg/urbit/version +++ b/pkg/urbit/version @@ -1 +1 @@ -1.11-rc2 \ No newline at end of file +1.11 \ No newline at end of file From 95650edb3afa99906d3032db56483d0f3d0c00d2 Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Sun, 13 Nov 2022 20:11:48 -0500 Subject: [PATCH 02/17] u3: protect guard page in u3e_yolo() --- pkg/urbit/noun/events.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkg/urbit/noun/events.c b/pkg/urbit/noun/events.c index ec2a995d1..f7ce98e04 100644 --- a/pkg/urbit/noun/events.c +++ b/pkg/urbit/noun/events.c @@ -1083,9 +1083,18 @@ u3e_yolo(void) // NB: u3e_save() will reinstate protection flags // if ( 0 != mprotect((void *)u3_Loom, u3a_bytes, (PROT_READ | PROT_WRITE)) ) { + // XX confirm recoverable errors + // + fprintf(stderr, "loom: yolo: %s\r\n", strerror(errno)); return c3n; } + if ( 0 != mprotect(u3a_into(gar_pag_p), pag_siz_i, PROT_NONE) ) { + fprintf(stderr, "loom: failed to protect guard page: %s\r\n", + strerror(errno)); + c3_assert(0); + } + return c3y; } From 196bb4ae1fe0be8873f471f014f93c1a6df977d8 Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Sun, 13 Nov 2022 20:27:19 -0500 Subject: [PATCH 03/17] vere: bumps version --- pkg/urbit/version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/urbit/version b/pkg/urbit/version index b81620707..2f7497214 100644 --- a/pkg/urbit/version +++ b/pkg/urbit/version @@ -1 +1 @@ -1.11 \ No newline at end of file +1.12-rc1 \ No newline at end of file From f7275b6e6759a91e3036f95b1c9ee14e5a7a3efe Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Sun, 13 Nov 2022 23:22:36 -0500 Subject: [PATCH 04/17] u3: assert guard page invariants when saving snapshot --- pkg/urbit/noun/events.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/urbit/noun/events.c b/pkg/urbit/noun/events.c index f7ce98e04..5d55b95c6 100644 --- a/pkg/urbit/noun/events.c +++ b/pkg/urbit/noun/events.c @@ -613,6 +613,9 @@ _ce_patch_compose(void) nor_w = (nwr_w + (pag_wiz_i - 1)) >> u3a_page; sou_w = (swu_w + (pag_wiz_i - 1)) >> u3a_page; + + c3_assert( ((gar_pag_p >> u3a_page) >= nor_w) + && ((gar_pag_p >> u3a_page) <= (u3a_pages - (sou_w + 1))) ); } #ifdef U3_SNAPSHOT_VALIDATION From 6dea612849a778c0265a7a52dbe313c733fcb31b Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Sun, 13 Nov 2022 23:21:30 -0500 Subject: [PATCH 05/17] u3: initialize guard page in u3m_boot_lite() --- pkg/urbit/noun/manage.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/urbit/noun/manage.c b/pkg/urbit/noun/manage.c index 69e5f4b65..a21c891fb 100644 --- a/pkg/urbit/noun/manage.c +++ b/pkg/urbit/noun/manage.c @@ -1858,6 +1858,10 @@ u3m_boot_lite(void) */ u3m_pave(c3y); + /* Place the guard page. + */ + u3e_init(); + /* Initialize the jet system. */ u3j_boot(c3y); From e1e0ca76d8dfc14d00bba8ba5e92fac7b4131b4d Mon Sep 17 00:00:00 2001 From: Liam Fitzgerald Date: Mon, 14 Nov 2022 15:19:35 +1000 Subject: [PATCH 06/17] pier: fix jamming archive --- pkg/urbit/vere/pier.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/urbit/vere/pier.c b/pkg/urbit/vere/pier.c index a0d0317ae..9f1fd00e0 100644 --- a/pkg/urbit/vere/pier.c +++ b/pkg/urbit/vere/pier.c @@ -492,8 +492,12 @@ _pier_on_scry_done(void* ptr_v, u3_noun nun) { u3_atom puf = u3i_string(u3_Host.ops_u.puf_c); if ( c3y == u3r_sing(c3__jam, puf) ) { - out = u3qe_jam(res); + c3_d len_d; + c3_y* byt_y; + u3s_jam_xeno(res, &len_d, &byt_y); + out = u3i_bytes(len_d, byt_y); ext_c = "jam"; + free(byt_y); } else if ( c3y == u3a_is_atom(res) ) { out = u3dc("scot", u3k(puf), u3k(res)); From e8879fb5ababa3ba39c64c11ba095f01d10e61e3 Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Mon, 14 Nov 2022 14:04:03 -0500 Subject: [PATCH 07/17] vere: bumps version --- pkg/urbit/version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/urbit/version b/pkg/urbit/version index 2f7497214..7a80fac6d 100644 --- a/pkg/urbit/version +++ b/pkg/urbit/version @@ -1 +1 @@ -1.12-rc1 \ No newline at end of file +1.12-rc2 \ No newline at end of file From 39bf78c223f998aab45bbfdb15e5957e9ff46875 Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Mon, 14 Nov 2022 22:55:47 -0500 Subject: [PATCH 08/17] nix: update linux-aarch64 overlay to exclude macos m1 --- nix/overlays/arm.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nix/overlays/arm.nix b/nix/overlays/arm.nix index 36c29d9bc..be0112296 100644 --- a/nix/overlays/arm.nix +++ b/nix/overlays/arm.nix @@ -3,8 +3,9 @@ final: prev: let isAarch64 = prev.stdenv.hostPlatform.isAarch64; + isDarwin = prev.stdenv.isDarwin; -in prev.lib.optionalAttrs isAarch64 { +in prev.lib.optionalAttrs (isAarch64 && !isDarwin) { libsigsegv = prev.libsigsegv.overrideAttrs (attrs: { preConfigure = (prev.preConfigure or "") + '' sed -i 's/^CFG_FAULT=$/CFG_FAULT=fault-linux-arm.h/' configure From 72eb04bf5159cf2bcedcbe4361e25db6a60dc51b Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Mon, 14 Nov 2022 18:16:58 -0500 Subject: [PATCH 09/17] u3: handle partial reads in snapshot system --- pkg/urbit/noun/events.c | 67 ++++++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 17 deletions(-) diff --git a/pkg/urbit/noun/events.c b/pkg/urbit/noun/events.c index 5d55b95c6..a9d5d8b29 100644 --- a/pkg/urbit/noun/events.c +++ b/pkg/urbit/noun/events.c @@ -436,7 +436,8 @@ _ce_patch_delete(void) static c3_o _ce_patch_verify(u3_ce_patch* pat_u) { - c3_w i_w; + ssize_t ret_i; + c3_w i_w; if ( u3e_version != pat_u->con_u->ver_y ) { fprintf(stderr, "loom: patch version mismatch: have %u, need %u\r\n", @@ -454,8 +455,13 @@ _ce_patch_verify(u3_ce_patch* pat_u) fprintf(stderr, "loom: patch seek: %s\r\n", strerror(errno)); return c3n; } - if ( -1 == read(pat_u->mem_i, mem_w, pag_siz_i) ) { - fprintf(stderr, "loom: patch read: %s\r\n", strerror(errno)); + if ( pag_siz_i != (ret_i = read(pat_u->mem_i, mem_w, pag_siz_i)) ) { + if ( 0 < ret_i ) { + fprintf(stderr, "loom: patch partial read: %zu\r\n", (size_t)ret_i); + } + else { + fprintf(stderr, "loom: patch read fail: %s\r\n", strerror(errno)); + } return c3n; } { @@ -717,7 +723,8 @@ _ce_image_resize(u3e_image* img_u, c3_w pgs_w) static void _ce_patch_apply(u3_ce_patch* pat_u) { - c3_w i_w; + ssize_t ret_i; + c3_w i_w; // resize images // @@ -751,8 +758,14 @@ _ce_patch_apply(u3_ce_patch* pat_u) off_w = (u3a_pages - (pag_w + 1)); } - if ( -1 == read(pat_u->mem_i, mem_w, pag_siz_i) ) { - fprintf(stderr, "loom: patch apply read: %s\r\n", strerror(errno)); + if ( pag_siz_i != (ret_i = read(pat_u->mem_i, mem_w, pag_siz_i)) ) { + if ( 0 < ret_i ) { + fprintf(stderr, "loom: patch apply partial read: %zu\r\n", + (size_t)ret_i); + } + else { + fprintf(stderr, "loom: patch apply read: %s\r\n", strerror(errno)); + } c3_assert(0); } else { @@ -782,13 +795,20 @@ _ce_image_blit(u3e_image* img_u, return; } - c3_w i_w; - c3_w siz_w = pag_siz_i; + ssize_t ret_i; + c3_w i_w; + c3_w siz_w = pag_siz_i; lseek(img_u->fid_i, 0, SEEK_SET); for ( i_w = 0; i_w < img_u->pgs_w; i_w++ ) { - if ( -1 == read(img_u->fid_i, ptr_w, siz_w) ) { - fprintf(stderr, "loom: image blit read: %s\r\n", strerror(errno)); + if ( siz_w != (ret_i = read(img_u->fid_i, ptr_w, siz_w)) ) { + if ( 0 < ret_i ) { + fprintf(stderr, "loom: image blit partial read: %zu\r\n", + (size_t)ret_i); + } + else { + fprintf(stderr, "loom: image blit read: %s\r\n", strerror(errno)); + } c3_assert(0); } @@ -814,15 +834,21 @@ _ce_image_fine(u3e_image* img_u, c3_w* ptr_w, c3_ws stp_ws) { - c3_w i_w; - c3_w buf_w[pag_wiz_i]; + ssize_t ret_i; + c3_w i_w; + c3_w buf_w[pag_wiz_i]; lseek(img_u->fid_i, 0, SEEK_SET); for ( i_w=0; i_w < img_u->pgs_w; i_w++ ) { c3_w mem_w, fil_w; - if ( -1 == read(img_u->fid_i, buf_w, pag_siz_i) ) { - fprintf(stderr, "loom: image fine read: %s\r\n", strerror(errno)); + if ( pag_siz_i != (ret_i = read(img_u->fid_i, buf_w, pag_siz_i)) ) { + if ( 0 < ret_i ) { + fprintf(stderr, "loom: image fine partial read: %zu\r\n", (size_t)ret_i); + } + else { + fprintf(stderr, "loom: image fine read: %s\r\n", strerror(errno)); + } c3_assert(0); } mem_w = u3r_mug_words(ptr_w, pag_wiz_i); @@ -848,7 +874,8 @@ _ce_image_fine(u3e_image* img_u, static c3_o _ce_image_copy(u3e_image* fom_u, u3e_image* tou_u) { - c3_w i_w; + ssize_t ret_i; + c3_w i_w; // resize images // @@ -869,8 +896,14 @@ _ce_image_copy(u3e_image* fom_u, u3e_image* tou_u) c3_w mem_w[pag_wiz_i]; c3_w off_w = i_w; - if ( -1 == read(fom_u->fid_i, mem_w, pag_siz_i) ) { - fprintf(stderr, "loom: image copy read: %s\r\n", strerror(errno)); + if ( pag_siz_i != (ret_i = read(fom_u->fid_i, mem_w, pag_siz_i)) ) { + if ( 0 < ret_i ) { + fprintf(stderr, "loom: image copy partial read: %zu\r\n", + (size_t)ret_i); + } + else { + fprintf(stderr, "loom: image copy read: %s\r\n", strerror(errno)); + } return c3n; } else { From 6ea0af456eb016ba7f589aaa45eaa78cc534cf4a Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Mon, 14 Nov 2022 18:22:33 -0500 Subject: [PATCH 10/17] u3: handle partial writes in snapshot system --- pkg/urbit/noun/events.c | 47 ++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/pkg/urbit/noun/events.c b/pkg/urbit/noun/events.c index a9d5d8b29..448c26ca0 100644 --- a/pkg/urbit/noun/events.c +++ b/pkg/urbit/noun/events.c @@ -353,10 +353,17 @@ _ce_image_open(u3e_image* img_u) static void _ce_patch_write_control(u3_ce_patch* pat_u) { - c3_w len_w = sizeof(u3e_control) + - (pat_u->con_u->pgs_w * sizeof(u3e_line)); + ssize_t ret_i; + c3_w len_w = sizeof(u3e_control) + + (pat_u->con_u->pgs_w * sizeof(u3e_line)); - if ( len_w != write(pat_u->ctl_i, pat_u->con_u, len_w) ) { + if ( len_w != (ret_i = write(pat_u->ctl_i, pat_u->con_u, len_w)) ) { + if ( 0 < ret_i ) { + fprintf(stderr, "loom: patch ctl partial write: %zu\r\n", (size_t)ret_i); + } + else { + fprintf(stderr, "loom: patch ctl write: %s\r\n", strerror(errno)); + } c3_assert(0); } } @@ -548,8 +555,20 @@ _ce_patch_write_page(u3_ce_patch* pat_u, c3_w pgc_w, c3_w* mem_w) { + ssize_t ret_i; + c3_assert(-1 != lseek(pat_u->mem_i, pgc_w * pag_siz_i, SEEK_SET)); - c3_assert(pag_siz_i == write(pat_u->mem_i, mem_w, pag_siz_i)); + + if ( pag_siz_i != (ret_i = write(pat_u->mem_i, mem_w, pag_siz_i)) ) { + if ( 0 < ret_i ) { + fprintf(stderr, "loom: patch page partial write: %zu\r\n", + (size_t)ret_i); + } + else { + fprintf(stderr, "loom: patch page write: %s\r\n", strerror(errno)); + } + c3_assert(0); + } } /* _ce_patch_count_page(): count a page, producing new counter. @@ -773,8 +792,14 @@ _ce_patch_apply(u3_ce_patch* pat_u) fprintf(stderr, "loom: patch apply seek: %s\r\n", strerror(errno)); c3_assert(0); } - if ( -1 == write(fid_i, mem_w, pag_siz_i) ) { - fprintf(stderr, "loom: patch apply write: %s\r\n", strerror(errno)); + if ( pag_siz_i != (ret_i = write(fid_i, mem_w, pag_siz_i)) ) { + if ( 0 < ret_i ) { + fprintf(stderr, "loom: patch apply partial write: %zu\r\n", + (size_t)ret_i); + } + else { + fprintf(stderr, "loom: patch apply write: %s\r\n", strerror(errno)); + } c3_assert(0); } } @@ -911,8 +936,14 @@ _ce_image_copy(u3e_image* fom_u, u3e_image* tou_u) fprintf(stderr, "loom: image copy seek: %s\r\n", strerror(errno)); return c3n; } - if ( -1 == write(tou_u->fid_i, mem_w, pag_siz_i) ) { - fprintf(stderr, "loom: image copy write: %s\r\n", strerror(errno)); + if ( pag_siz_i != (ret_i = write(tou_u->fid_i, mem_w, pag_siz_i)) ) { + if ( 0 < ret_i ) { + fprintf(stderr, "loom: image copy partial write: %zu\r\n", + (size_t)ret_i); + } + else { + fprintf(stderr, "loom: image copy write: %s\r\n", strerror(errno)); + } return c3n; } } From adc058724c94826b87e2cfc9f502d5ca0b4600a9 Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Mon, 14 Nov 2022 18:31:30 -0500 Subject: [PATCH 11/17] u3: print mprotect errors in snapshot system --- pkg/urbit/noun/events.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/urbit/noun/events.c b/pkg/urbit/noun/events.c index 448c26ca0..2bdbc3383 100644 --- a/pkg/urbit/noun/events.c +++ b/pkg/urbit/noun/events.c @@ -226,8 +226,9 @@ _ce_center_guard_page(void) if ( -1 == mprotect(u3a_into(gar_pag_p), pag_siz_i, PROT_NONE) ) { fprintf(stderr, "loom: failed to protect the guard page " - "(base address %p)\r\n", - u3a_into(gar_pag_p)); + "(base address %p): %s\r\n", + u3a_into(gar_pag_p), + strerror(errno)); goto fail; } @@ -611,6 +612,7 @@ _ce_patch_save_page(u3_ce_patch* pat_u, pag_siz_i, PROT_READ) ) { + fprintf(stderr, "loom: patch mprotect: %s\r\n", strerror(errno)); c3_assert(0); } From 4c930162e00c05902040c2fcff0a28775af4203c Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Mon, 14 Nov 2022 19:41:37 -0500 Subject: [PATCH 12/17] u3: print error msg if system page size is incompatible --- pkg/urbit/noun/events.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/urbit/noun/events.c b/pkg/urbit/noun/events.c index 2bdbc3383..933eb774c 100644 --- a/pkg/urbit/noun/events.c +++ b/pkg/urbit/noun/events.c @@ -1075,7 +1075,15 @@ u3e_live(c3_o nuu_o, c3_c* dir_c) { // require that our page size is a multiple of the system page size. // - c3_assert(0 == (1 << (2 + u3a_page)) % sysconf(_SC_PAGESIZE)); + { + size_t sys_i = sysconf(_SC_PAGESIZE); + + if ( pag_siz_i % sys_i ) { + fprintf(stderr, "loom: incompatible system page size (%zuKB)\r\n", + sys_i >> 10); + exit(1); + } + } u3P.dir_c = dir_c; u3P.nor_u.nam_c = "north"; From 2a1a70790078d3b6310b59fcdc868a8a8921b2ec Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Mon, 14 Nov 2022 19:44:49 -0500 Subject: [PATCH 13/17] u3: detect snapshots from a larger loom, print and exit --- pkg/urbit/noun/events.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pkg/urbit/noun/events.c b/pkg/urbit/noun/events.c index 933eb774c..db286d567 100644 --- a/pkg/urbit/noun/events.c +++ b/pkg/urbit/noun/events.c @@ -1118,6 +1118,13 @@ u3e_live(c3_o nuu_o, c3_c* dir_c) _ce_patch_delete(); } + // detect snapshots from a larger loom + // + if ( (u3P.nor_u.pgs_w + u3P.sou_u.pgs_w + 1) >= u3a_pages ) { + fprintf(stderr, "boot: snapshot too big for loom\r\n"); + exit(1); + } + // mark all pages dirty (pages in the snapshot will be marked clean) // u3e_foul(); From 4f5f7e2804d55ceaa6a38602ec02e9a45bc1afee Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Fri, 5 Aug 2022 10:32:52 -0400 Subject: [PATCH 14/17] u3: normalize home-road stack after snapshot restoration --- pkg/urbit/noun/manage.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/urbit/noun/manage.c b/pkg/urbit/noun/manage.c index a21c891fb..e5648a6ab 100644 --- a/pkg/urbit/noun/manage.c +++ b/pkg/urbit/noun/manage.c @@ -590,6 +590,11 @@ _find_home(void) u3H = (void *)((mem_w + len_w) - siz_w); u3R = &u3H->rod_u; + + // this looks risky, but there are no legitimate scenarios + // where it's wrong + // + u3R->cap_p = u3R->mat_p = u3a_words - c3_wiseof(*u3H); } /* u3m_pave(): instantiate or activate image. From 284addf15974899891881e305bad218afb947e71 Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Mon, 14 Nov 2022 18:30:03 -0500 Subject: [PATCH 15/17] u3: handle and print lseek errors in snapshot system --- pkg/urbit/noun/events.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/pkg/urbit/noun/events.c b/pkg/urbit/noun/events.c index db286d567..566c804ee 100644 --- a/pkg/urbit/noun/events.c +++ b/pkg/urbit/noun/events.c @@ -558,7 +558,10 @@ _ce_patch_write_page(u3_ce_patch* pat_u, { ssize_t ret_i; - c3_assert(-1 != lseek(pat_u->mem_i, pgc_w * pag_siz_i, SEEK_SET)); + if ( -1 == lseek(pat_u->mem_i, pgc_w * pag_siz_i, SEEK_SET) ) { + fprintf(stderr, "loom: patch page seek: %s\r\n", strerror(errno)); + c3_assert(0); + } if ( pag_siz_i != (ret_i = write(pat_u->mem_i, mem_w, pag_siz_i)) ) { if ( 0 < ret_i ) { @@ -826,7 +829,11 @@ _ce_image_blit(u3e_image* img_u, c3_w i_w; c3_w siz_w = pag_siz_i; - lseek(img_u->fid_i, 0, SEEK_SET); + if ( -1 == lseek(img_u->fid_i, 0, SEEK_SET) ) { + fprintf(stderr, "loom: image blit seek 0: %s\r\n", strerror(errno)); + c3_assert(0); + } + for ( i_w = 0; i_w < img_u->pgs_w; i_w++ ) { if ( siz_w != (ret_i = read(img_u->fid_i, ptr_w, siz_w)) ) { if ( 0 < ret_i ) { @@ -865,7 +872,11 @@ _ce_image_fine(u3e_image* img_u, c3_w i_w; c3_w buf_w[pag_wiz_i]; - lseek(img_u->fid_i, 0, SEEK_SET); + if ( -1 == lseek(img_u->fid_i, 0, SEEK_SET) ) { + fprintf(stderr, "loom: image fine seek 0: %s\r\n", strerror(errno)); + c3_assert(0); + } + for ( i_w=0; i_w < img_u->pgs_w; i_w++ ) { c3_w mem_w, fil_w; From 58805b8cef3b52f323b453ffffcd8e4c25c52218 Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Mon, 14 Nov 2022 23:18:43 -0500 Subject: [PATCH 16/17] u3: print errors while deleting snapshot patch --- pkg/urbit/noun/events.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pkg/urbit/noun/events.c b/pkg/urbit/noun/events.c index 566c804ee..551149cb6 100644 --- a/pkg/urbit/noun/events.c +++ b/pkg/urbit/noun/events.c @@ -432,11 +432,17 @@ _ce_patch_delete(void) { c3_c ful_c[8193]; - snprintf(ful_c, 8192, "%s/.urb/chk/control.bin", u3P.dir_c); - c3_unlink(ful_c); + snprintf(ful_c, 8192, "%s/.urb/chk/control.bin", u3P.dir_c); + if ( unlink(ful_c) ) { + fprintf(stderr, "loom: failed to delete control.bin: %s\r\n", + strerror(errno)); + } snprintf(ful_c, 8192, "%s/.urb/chk/memory.bin", u3P.dir_c); - c3_unlink(ful_c); + if ( unlink(ful_c) ) { + fprintf(stderr, "loom: failed to remove memory.bin: %s\r\n", + strerror(errno)); + } } /* _ce_patch_verify(): check patch data mug. From 215f6ce6508053d696f0351183ac5100b2d142f5 Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Mon, 14 Nov 2022 23:30:29 -0500 Subject: [PATCH 17/17] vere: bumps version --- pkg/urbit/version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/urbit/version b/pkg/urbit/version index 7a80fac6d..b33d7ad37 100644 --- a/pkg/urbit/version +++ b/pkg/urbit/version @@ -1 +1 @@ -1.12-rc2 \ No newline at end of file +1.12-rc3 \ No newline at end of file