pg /c database 通过。似乎是pg使用 open/write 写入了某个文件,通过 fopen/fscanf 绕过了hook路径导致的。出现了新的段错误。
This commit is contained in:
@@ -226,6 +226,29 @@ void do_resize(int fd, uint64_t handle_id, uint64_t new_size) {
|
||||
if(resp.data) free(resp.data);
|
||||
}
|
||||
|
||||
void do_reset(int fd) {
|
||||
struct zvfs_req req;
|
||||
memset(&req, 0, sizeof(req));
|
||||
req.opcode = ZVFS_OP_RESET_BLOBSTORE;
|
||||
|
||||
uint8_t buf[BUF_SIZE];
|
||||
size_t n = zvfs_serialize_req(&req, buf, sizeof(buf));
|
||||
if (n == 0) { fprintf(stderr, "serialize failed\n"); return; }
|
||||
if (write(fd, buf, n) != n) { perror("write"); return; }
|
||||
|
||||
uint8_t resp_buf[BUF_SIZE];
|
||||
ssize_t r = read(fd, resp_buf, sizeof(resp_buf));
|
||||
if (r <= 0) { perror("read"); return; }
|
||||
|
||||
struct zvfs_resp resp;
|
||||
memset(&resp, 0, sizeof(resp));
|
||||
size_t consumed = zvfs_deserialize_resp(resp_buf, r, &resp);
|
||||
if (consumed == 0) { fprintf(stderr, "deserialize failed\n"); return; }
|
||||
|
||||
printf("Received RESET_BLOBSTORE response: status=%d\n", resp.status);
|
||||
if (resp.data) free(resp.data);
|
||||
}
|
||||
|
||||
// -------------------- main --------------------
|
||||
|
||||
int main() {
|
||||
@@ -233,7 +256,7 @@ int main() {
|
||||
if(fd < 0) return 1;
|
||||
|
||||
printf("Connected to server at %s\n", SOCKET_PATH);
|
||||
printf("Commands:\n create\n open <blob>\n read <handle> <offset> <len>\n write <handle> <offset> <data>\n writeg <handle> <offset> <data>\n close <handle>\n delete <blob>\n resize <handle> <size>\n quit\n");
|
||||
printf("Commands:\n create\n open <blob>\n read <handle> <offset> <len>\n write <handle> <offset> <data>\n writeg <handle> <offset> <data>\n close <handle>\n delete <blob>\n resize <handle> <size>\n reset\n quit\n");
|
||||
|
||||
char line[256];
|
||||
while (1) {
|
||||
@@ -257,6 +280,7 @@ int main() {
|
||||
else if (strcmp(cmd,"close")==0 && sscanf(line,"%*s %lu",&a)==1) do_close(fd,a);
|
||||
else if (strcmp(cmd,"delete")==0 && sscanf(line,"%*s %lu",&a)==1) do_delete(fd,a);
|
||||
else if (strcmp(cmd,"resize")==0 && sscanf(line,"%*s %lu %lu",&a,&b)==2) do_resize(fd,a,b);
|
||||
else if (strcmp(cmd,"reset")==0) do_reset(fd);
|
||||
else printf("Unknown or invalid command\n");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user