RideFile *RawFileReader::openRideFile(QFile &file, QStringList &errors, QList<RideFile*>*) const { RideFile *rideFile = new RideFile; rideFile->setDeviceType("PowerTap"); rideFile->setFileFormat("GoldenCheetah Raw PowerTap (raw)"); if (!file.open(QIODevice::ReadOnly)) { delete rideFile; return NULL; } FILE *f = fdopen(file.handle(), "r"); // failed to associate a stream! if (f==NULL) { file.close(); delete rideFile; return NULL; } ReadState state(rideFile, errors); pt_read_raw(f, &state, config_cb, time_cb, data_cb, error_cb); file.close(); // fclose can handle the file being closed already, QFile crashes on Windows // we need to do both because fclose needs to release its stream buffers and // fclose maintains local state that causes a crash when out of sync on Windows fclose(f); return rideFile; }
RideFile *RawFileReader::openRideFile(QFile &file, QStringList &errors) const { RideFile *rideFile = new RideFile; rideFile->setDeviceType("PowerTap"); if (!file.open(QIODevice::ReadOnly)) { delete rideFile; return NULL; } FILE *f = fdopen(file.handle(), "r"); assert(f); ReadState state(rideFile, errors); pt_read_raw(f, &state, config_cb, time_cb, data_cb, error_cb); return rideFile; }