📄 safe.c
字号:
#include <unistd.h>#include "ckpt.h"static struct ckpt_restore safe_cr;intxread(int sd, void *buf, size_t len){ char *p = (char *)buf; size_t nrecv = 0; ssize_t rv; while (nrecv < len) { rv = read(sd, p, len - nrecv); if (0 > rv) return -1; if (0 == rv) return 0; nrecv += rv; p += rv; } return nrecv;}intcontinuesafe(struct ckpt_restore *cr){ int i; char *p, *q; safe_cr = *cr; cr = 0; /* This pointer is in unsafe memory */ for (i = 0; i < safe_cr.head.num_regions; i++) { if (safe_cr.orig_regions[i].len != xread(safe_cr.fd, (void *)safe_cr.orig_regions[i].addr, safe_cr.orig_regions[i].len)) return -1; } close(safe_cr.fd); /* copy the command */ p = (char *)safe_cr.argv0; q = safe_cr.head.cmd; while (*q) *p++ = *q++; *p = '\0'; longjmp(safe_cr.head.jbuf, 1); /* We shouldn't be here. Don't return -- we don't have any idea what code we might return to. It is easier to debug if we catch a segfault in here. */ *((int *)0) = 0; /* Die */ return -1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -