static int _conn_bstring_readhandler(struct conn_t *conn, void *ctx) { bstring data = (bstring)ctx; int ret; ballocmin(data, data->slen + 128); ret = safe_read(conn->sock, data->data + data->slen, data->mlen - data->slen); if (ret > 0) { #if(_debug_) log_dbg("bstring_read: %d bytes", ret); #endif data->slen += ret; } else { #if(_debug_) log_dbg("socket closed!"); log_dbg("<== [%s]", data->data); #endif conn_finish(conn); } return ret; }
int bblk_fromfd(bstring s, int fd, int len) { int blen = len > 0 ? len : 128; int rd, rlen = 0; while (1) { ballocmin(s, s->slen + blen); rd = safe_read(fd, s->data + s->slen, blen); if (rd <= 0) break; s->slen += rd; rlen += rd; if (len > 0 && rlen == len) break; } return rlen; }
inline int normalize_path(bstring target) { ballocmin(target, PATH_MAX); char *path_buf = calloc(PATH_MAX+1, 1); // Some platforms (OSX!) don't allocated for you, so we have to char *normalized = realpath((const char *)target->data, path_buf); check(normalized, "Failed to normalize path: %s", bdata(target)); bassigncstr(target, normalized); free(path_buf); return 0; error: return 1; }