Fix potential crash using std::sort

It's entirely unclear why std::sort sometimes accesses the element with
index -1. In my limited testing switching to qSort avoids that.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2015-06-04 08:45:45 -07:00
parent 37aebe0b2e
commit f8a3a85210
2 changed files with 3 additions and 4 deletions

View file

@ -103,7 +103,6 @@ uint32_t create_dive_site(const char *name)
uint32_t create_dive_site_with_gps(const char *name, degrees_t latitude, degrees_t longitude) uint32_t create_dive_site_with_gps(const char *name, degrees_t latitude, degrees_t longitude)
{ {
struct dive_site *ds = alloc_dive_site(); struct dive_site *ds = alloc_dive_site();
ds->uuid = dive_site_getUniqId();
ds->name = copy_string(name); ds->name = copy_string(name);
ds->latitude = latitude; ds->latitude = latitude;
ds->longitude = longitude; ds->longitude = longitude;

View file

@ -44,7 +44,7 @@ void LocationInformationModel::update()
{ {
beginResetModel(); beginResetModel();
internalRowCount = dive_site_table.nr; internalRowCount = dive_site_table.nr;
std::sort(dive_site_table.dive_sites, dive_site_table.dive_sites + dive_site_table.nr, dive_site_less_than); qSort(dive_site_table.dive_sites, dive_site_table.dive_sites + dive_site_table.nr, dive_site_less_than);
endResetModel(); endResetModel();
} }
@ -55,8 +55,8 @@ int32_t LocationInformationModel::addDiveSite(const QString& name, int lon, int
longitude.udeg = lon; longitude.udeg = lon;
beginInsertRows(QModelIndex(), dive_site_table.nr, dive_site_table.nr); beginInsertRows(QModelIndex(), dive_site_table.nr, dive_site_table.nr);
int32_t uuid = create_dive_site_with_gps(name.toUtf8().data(), latitude, longitude); uint32_t uuid = create_dive_site_with_gps(name.toUtf8().data(), latitude, longitude);
std::sort(dive_site_table.dive_sites, dive_site_table.dive_sites + dive_site_table.nr, dive_site_less_than); qSort(dive_site_table.dive_sites, dive_site_table.dive_sites + dive_site_table.nr, dive_site_less_than);
internalRowCount = dive_site_table.nr; internalRowCount = dive_site_table.nr;
endInsertRows(); endInsertRows();
return uuid; return uuid;