static bool sendfile(int sock, long partition_id, FILE *f) { fseek(f, 0, SEEK_END); long filesize = ftell(f); rewind(f); if (filesize == EOF) return false; if (!sendlong(sock, filesize)) return false; if (!sendlong(sock, filesize)) return false; if (filesize > 0) { char buffer[1024]; do { size_t num = min(filesize, sizeof(buffer)); num = fread(buffer, 1, num, f); if (num < 1) return false; if (!senddata(sock, buffer, num, 0)) return false; filesize -= num; } while (filesize > 0); } return true; }
int sendfile(int sock, FILE *f) { // calculate file size fseek(f, 0, SEEK_END); long filesize = ftell(f); rewind(f); if (filesize == EOF) return 0; if (sendlong(sock, filesize) == 0) return 0; // send file using a buffer length of 1024 bytes if (filesize > 0) { char buffer[1024]; do { size_t num = min(filesize, sizeof(buffer)); num = fread(buffer, 1, num, f); if (num < 1) return 0; if (senddata(sock, buffer, num) == 0) return 0; filesize -= num; } while (filesize > 0); } return 1; }