From 4714c177e2fde09cfa76609ccaf9c72d62f39bfd Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Sun, 5 Jun 2016 17:42:29 -0700 Subject: [PATCH] Use standard C functions --- sshfs.c | 101 ++++++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 60 insertions(+), 41 deletions(-) diff --git a/sshfs.c b/sshfs.c index 14adca5..4f3bfe4 100644 --- a/sshfs.c +++ b/sshfs.c @@ -637,25 +637,25 @@ static inline void buf_add_path(struct buffer *buf, const char *path) if (sshfs.base_path[0]) { if (path[1]) { if (sshfs.base_path[strlen(sshfs.base_path)-1] != '/') { - realpath = g_strdup_printf("%s/%s", - sshfs.base_path, - path + 1); + if (asprintf(&realpath, "%s/%s", sshfs.base_path, path + 1) < 0) + abort(); } else { - realpath = g_strdup_printf("%s%s", - sshfs.base_path, - path + 1); + if (asprintf(&realpath, "%s%s", sshfs.base_path, path + 1) < 0) + abort(); } } else { - realpath = g_strdup(sshfs.base_path); + realpath = strdup(sshfs.base_path); } } else { if (path[1]) - realpath = g_strdup(path + 1); + realpath = strdup(path + 1); else - realpath = g_strdup("."); + realpath = strdup("."); } + if (!realpath) + abort(); buf_add_string(buf, realpath); - g_free(realpath); + free(realpath); } static int buf_check_get(struct buffer *buf, size_t len) @@ -948,10 +948,9 @@ nobundle: pathok: #endif - newpreload = g_strdup_printf("%s%s%s", - oldpreload ? oldpreload : "", - oldpreload ? " " : "", - sopath); + if (asprintf(&newpreload, "%s%s%s", + oldpreload ? oldpreload : "", oldpreload ? " " : "", sopath) < 0) + abort(); #ifdef __APPLE__ if (!newpreload || setenv("DYLD_INSERT_LIBRARIES", newpreload, 1) == -1) @@ -962,7 +961,7 @@ pathok: "for ssh nodelay workaround\n"); } #endif /* __APPLE__ */ - g_free(newpreload); + free(newpreload); return 0; } #endif @@ -1342,7 +1341,7 @@ static void request_free(struct request *req) { buf_free(&req->reply); sem_destroy(&req->ready); - g_free(req); + free(req); } static int request_table_insert(struct request_table *reqtab, struct request *req) @@ -1390,9 +1389,9 @@ static void chunk_free(struct read_chunk *chunk) rreq = list_entry(chunk->reqs.prev, struct read_req, list); list_del(&rreq->list); buf_free(&rreq->data); - g_free(rreq); + free(rreq); } - g_free(chunk); + free(chunk); } static void chunk_put(struct read_chunk *chunk) @@ -1944,8 +1943,10 @@ static int sftp_request_send(uint8_t type, struct iovec *iov, size_t count, struct request **reqp) { int err; - struct request *req = g_new0(struct request, 1); + struct request *req = calloc(1, sizeof(struct request)); + if (!req) + return -ENOMEM; req->want_reply = want_reply; req->end_func = end_func; req->data = data; @@ -2586,7 +2587,9 @@ static int sshfs_open_common(const char *path, mode_t mode, if (fi->flags & O_TRUNC) pflags |= SSH_FXF_TRUNC; - sf = g_new0(struct sshfs_file, 1); + sf = calloc(1, sizeof(struct sshfs_file)); + if (!sf) + return -ENOMEM; list_init(&sf->write_reqs); pthread_cond_init(&sf->write_finished, NULL); /* Assume random read after open */ @@ -2628,7 +2631,7 @@ static int sshfs_open_common(const char *path, mode_t mode, fi->fh = (unsigned long) sf; } else { cache_invalidate(path); - g_free(sf); + free(sf); } buf_free(&buf); return err; @@ -2701,7 +2704,7 @@ static void sshfs_file_put(struct sshfs_file *sf) { sf->refs--; if (!sf->refs) - g_free(sf); + free(sf); } static void sshfs_file_get(struct sshfs_file *sf) @@ -2771,9 +2774,11 @@ static void sshfs_read_begin(struct request *req) static struct read_chunk *sshfs_send_read(struct sshfs_file *sf, size_t size, off_t offset) { - struct read_chunk *chunk = g_new0(struct read_chunk, 1); + struct read_chunk *chunk = calloc(1, sizeof(struct read_chunk)); struct buffer *handle = &sf->handle; + if (!chunk) + abort(); pthread_cond_init(&chunk->sio.finished, NULL); list_init(&chunk->reqs); chunk->size = size; @@ -2787,7 +2792,9 @@ static struct read_chunk *sshfs_send_read(struct sshfs_file *sf, size_t size, struct read_req *rreq; size_t bsize = size < sshfs.max_read ? size : sshfs.max_read; - rreq = g_new0(struct read_req, 1); + rreq = calloc(1, sizeof(struct read_req)); + if (!rreq) + abort(); rreq->sio = &chunk->sio; rreq->size = bsize; buf_init(&rreq->data, 0); @@ -2858,7 +2865,7 @@ static int wait_chunk(struct read_chunk *chunk, char *buf, size_t size) size -= rreq->res; list_del(&rreq->list); buf_free(&rreq->data); - g_free(rreq); + free(rreq); } } @@ -3513,9 +3520,10 @@ static int sshfs_opt_proc(void *data, const char *arg, int key, switch (key) { case FUSE_OPT_KEY_OPT: if (is_ssh_opt(arg)) { - tmp = g_strdup_printf("-o%s", arg); + if (asprintf(&tmp, "-o%s", arg) < 0) + abort(); ssh_add_arg(tmp); - g_free(tmp); + free(tmp); return 0; } return 1; @@ -3528,9 +3536,10 @@ static int sshfs_opt_proc(void *data, const char *arg, int key, return 1; case KEY_PORT: - tmp = g_strdup_printf("-oPort=%s", arg + 2); + if (asprintf(&tmp, "-oPort=%s", arg + 2) < 0) + abort(); ssh_add_arg(tmp); - g_free(tmp); + free(tmp); return 0; case KEY_COMPRESS: @@ -3538,9 +3547,10 @@ static int sshfs_opt_proc(void *data, const char *arg, int key, return 0; case KEY_CONFIGFILE: - tmp = g_strdup_printf("-F%s", arg + 2); + if (asprintf(&tmp, "-F%s", arg + 2) < 0) + abort(); ssh_add_arg(tmp); - g_free(tmp); + free(tmp); return 0; case KEY_HELP: @@ -3755,17 +3765,19 @@ static void fsname_remove_commas(char *fsname) #if FUSE_VERSION >= 27 static char *fsname_escape_commas(char *fsnameold) { - char *fsname = g_malloc(strlen(fsnameold) * 2 + 1); + char *fsname = malloc(strlen(fsnameold) * 2 + 1); char *d = fsname; char *s; + if (!fsname) + abort(); for (s = fsnameold; *s; s++) { if (*s == '\\' || *s == ',') *d++ = '\\'; *d++ = *s; } *d = '\0'; - g_free(fsnameold); + free(fsnameold); return fsname; } @@ -4081,15 +4093,20 @@ int main(int argc, char *argv[]) exit(1); } - fsname = g_strdup(sshfs.host); - sshfs.base_path = g_strdup(find_base_path()); + fsname = strdup(sshfs.host); + if (!fsname) + abort(); + sshfs.base_path = strdup(find_base_path()); + if (!sshfs.base_path) + abort(); if (sshfs.ssh_command) set_ssh_command(); - tmp = g_strdup_printf("-%i", sshfs.ssh_ver); + if (asprintf(&tmp, "-%i", sshfs.ssh_ver) < 0) + abort(); ssh_add_arg(tmp); - g_free(tmp); + free(tmp); ssh_add_arg(sshfs.host); if (sshfs.sftp_server) sftp_server = sshfs.sftp_server; @@ -4125,14 +4142,16 @@ int main(int argc, char *argv[]) fsname = fsname_escape_commas(fsname); else fsname_remove_commas(fsname); - tmp = g_strdup_printf("-osubtype=sshfs,fsname=%s", fsname); + if (asprintf(&tmp, "-osubtype=sshfs,fsname=%s", fsname) < 0) + abort(); #else fsname_remove_commas(fsname); - tmp = g_strdup_printf("-ofsname=sshfs#%s", fsname); + if (asprintf(&tmp, "-ofsname=sshfs#%s", fsname) < 0) + abort(); #endif fuse_opt_insert_arg(&args, 1, tmp); - g_free(tmp); - g_free(fsname); + free(tmp); + free(fsname); check_large_read(&args); #if FUSE_VERSION >= 26 -- 2.9.0