int recvfile(int socket_e, const char filename[512], int rest) { int ret = -1; Lv2FsFile fd; char *buf = (char*)malloc(BUFFER_SIZE); if(buf != NULL && lv2FsOpen(filename, LV2_O_WRONLY | LV2_O_CREAT, &fd, 0644, NULL, 0) == 0) { u64 read_e, write_e = 0, pos; if(rest > 0) { lv2FsLSeek64(fd, (s64)rest, SEEK_SET, &pos); } else { lv2FsFtruncate(fd, 0); } ret = 0; while((read_e = (u64)recv(socket_e, buf, BUFFER_SIZE, MSG_WAITALL)) > 0) { if(lv2FsWrite(fd, buf, read_e, &write_e) != 0 || write_e < read_e) { // write error ret = -1; break; } } lv2FsClose(fd); } if(buf) { free(buf); *&buf = NULL; } return ret; }
int psl1ght_ftruncate_r(struct _reent* r, int fd, off_t length) { return lv2ErrnoReentrant(r, lv2FsFtruncate(fd, length)); }
int ftruncate(int fd, off_t length) { return lv2Errno(lv2FsFtruncate(fd, length)); }