mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
core: enable compiler warngings for report_error and report_info
printf() is a horrible interface as it does no type checking. Let's at least use the compiler to check format strings and arguments. This obviously doesn't work for translated strings and using report_error on translated strings is dubious. But OK. Had to convert a number of report_error() calls to supress warnings. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
fcf0bda042
commit
bfbf4934dd
13 changed files with 39 additions and 33 deletions
|
@ -97,7 +97,7 @@ void CloudStorageAuthenticate::uploadFinished()
|
|||
} else if (cloudAuthReply == QLatin1String("[VERIFY]") ||
|
||||
cloudAuthReply == QLatin1String("Invalid PIN")) {
|
||||
qPrefCloudStorage::set_cloud_verification_status(qPrefCloudStorage::CS_NEED_TO_VERIFY);
|
||||
report_error(qPrintable(tr("Cloud account verification required, enter PIN in preferences")));
|
||||
report_error("%s", qPrintable(tr("Cloud account verification required, enter PIN in preferences")));
|
||||
} else if (cloudAuthReply == QLatin1String("[PASSWDCHANGED]")) {
|
||||
qPrefCloudStorage::set_cloud_storage_password(cloudNewPassword);
|
||||
cloudNewPassword.clear();
|
||||
|
|
|
@ -594,7 +594,7 @@ QString ConfigureDiveComputer::dc_open(device_data_t *data)
|
|||
rc = divecomputer_device_open(data);
|
||||
|
||||
if (rc != DC_STATUS_SUCCESS) {
|
||||
report_error(errmsg(rc));
|
||||
report_error("%s", errmsg(rc));
|
||||
} else {
|
||||
rc = dc_device_open(&data->device, data->context, data->descriptor, data->iostream);
|
||||
}
|
||||
|
|
|
@ -688,7 +688,7 @@ int datatrak_import(std::string &mem, std::string &wl_mem, struct divelog *log)
|
|||
// Verify fileheader, get number of dives in datatrak divelog, zero on error
|
||||
numdives = read_file_header((unsigned char *)mem.data());
|
||||
if (!numdives) {
|
||||
report_error(translate("gettextFromC", "[Error] File is not a DataTrak file. Aborted"));
|
||||
report_error("%s", translate("gettextFromC", "[Error] File is not a DataTrak file. Aborted"));
|
||||
goto bail;
|
||||
}
|
||||
// Verify WLog .add file, Beginning sequence and Nº dives
|
||||
|
@ -711,7 +711,7 @@ int datatrak_import(std::string &mem, std::string &wl_mem, struct divelog *log)
|
|||
if (!wl_mem.empty())
|
||||
wlog_compl_parser(wl_mem, ptdive, i);
|
||||
if (runner == NULL) {
|
||||
report_error(translate("gettextFromC", "Error: no dive"));
|
||||
report_error("%s", translate("gettextFromC", "Error: no dive"));
|
||||
free(ptdive);
|
||||
rc = 1;
|
||||
goto out;
|
||||
|
|
|
@ -149,7 +149,7 @@ void exportHtmlInitLogic(const QString &filename, struct htmlExportSetting &hes)
|
|||
|
||||
QString searchPath = getSubsurfaceDataPath("theme");
|
||||
if (searchPath.isEmpty()) {
|
||||
report_error(qPrintable(gettextFromC::tr("Cannot find a folder called 'theme' in the standard locations")));
|
||||
report_error("%s", qPrintable(gettextFromC::tr("Cannot find a folder called 'theme' in the standard locations")));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -8,9 +8,15 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define __printf(x, y) __attribute__((__format__(__printf__, x, y)))
|
||||
#else
|
||||
#define __printf(x, y)
|
||||
#endif
|
||||
|
||||
extern int verbose;
|
||||
extern int report_error(const char *fmt, ...);
|
||||
extern void report_info(const char *fmt, ...);
|
||||
extern int __printf(1, 2) report_error(const char *fmt, ...);
|
||||
extern void __printf(1, 2) report_info(const char *fmt, ...);
|
||||
extern void set_error_cb(void(*cb)(char *)); // Callback takes ownership of passed string
|
||||
#define SSRF_INFO(fmt, ...) report_info(fmt, ##__VA_ARGS__)
|
||||
|
||||
|
|
|
@ -191,7 +191,7 @@ static int reset_to_remote(struct git_info *info, git_reference *local, const gi
|
|||
|
||||
if (git_reference_set_target(&out, local, new_id, "Update to remote")) {
|
||||
SSRF_INFO("git storage: could not update local cache to newer remote data");
|
||||
return report_error(translate("gettextFromC", "Could not update local cache to newer remote data"));
|
||||
return report_error("%s", translate("gettextFromC", "Could not update local cache to newer remote data"));
|
||||
}
|
||||
git_reference_free(out);
|
||||
|
||||
|
@ -205,7 +205,7 @@ static int reset_to_remote(struct git_info *info, git_reference *local, const gi
|
|||
if (git_object_lookup(&target, info->repo, new_id, GIT_OBJ_COMMIT)) {
|
||||
SSRF_INFO("git storage: could not look up remote commit");
|
||||
if (info->is_subsurface_cloud)
|
||||
return report_error(translate("gettextFromC", "Subsurface cloud storage corrupted"));
|
||||
return report_error("%s", translate("gettextFromC", "Subsurface cloud storage corrupted"));
|
||||
else
|
||||
return report_error("Could not look up remote commit");
|
||||
}
|
||||
|
@ -213,7 +213,7 @@ static int reset_to_remote(struct git_info *info, git_reference *local, const gi
|
|||
if (git_reset(info->repo, target, GIT_RESET_HARD, &opts)) {
|
||||
SSRF_INFO("git storage: local head checkout failed after update");
|
||||
if (info->is_subsurface_cloud)
|
||||
return report_error(translate("gettextFromC", "Could not update local cache to newer remote data"));
|
||||
return report_error("%s", translate("gettextFromC", "Could not update local cache to newer remote data"));
|
||||
else
|
||||
return report_error("Local head checkout failed after update");
|
||||
}
|
||||
|
@ -331,7 +331,7 @@ static int update_remote(struct git_info *info, git_remote *origin, git_referenc
|
|||
const char *msg = giterr_last()->message;
|
||||
SSRF_INFO("git storage: unable to update remote with current local cache state, error: %s", msg);
|
||||
if (info->is_subsurface_cloud)
|
||||
return report_error(translate("gettextFromC", "Could not update Subsurface cloud storage, try again later"));
|
||||
return report_error("%s", translate("gettextFromC", "Could not update Subsurface cloud storage, try again later"));
|
||||
else
|
||||
return report_error("Unable to update remote with current local cache state (%s)", msg);
|
||||
}
|
||||
|
@ -417,7 +417,7 @@ static int try_to_git_merge(struct git_info *info, git_reference **local_p, git_
|
|||
}
|
||||
git_index_conflict_cleanup(merged_index);
|
||||
git_index_conflict_iterator_free(iter);
|
||||
report_error(translate("gettextFromC", "Remote storage and local data diverged. Cannot combine local and remote changes"));
|
||||
report_error("%s", translate("gettextFromC", "Remote storage and local data diverged. Cannot combine local and remote changes"));
|
||||
}
|
||||
{
|
||||
git_oid merge_oid, commit_oid;
|
||||
|
@ -455,7 +455,7 @@ static int try_to_git_merge(struct git_info *info, git_reference **local_p, git_
|
|||
}
|
||||
|
||||
diverged_error:
|
||||
return report_error(translate("gettextFromC", "Remote storage and local data diverged"));
|
||||
return report_error("%s", translate("gettextFromC", "Remote storage and local data diverged"));
|
||||
|
||||
write_error:
|
||||
free_buffer(&msg);
|
||||
|
@ -469,7 +469,7 @@ static int cleanup_local_cache(struct git_info *info)
|
|||
{
|
||||
char *backup_path = move_local_cache(info);
|
||||
SSRF_INFO("git storage: problems with local cache, moved to %s", backup_path);
|
||||
report_error(translate("gettextFromC", "Problems with local cache of Subsurface cloud data"));
|
||||
report_error("%s", translate("gettextFromC", "Problems with local cache of Subsurface cloud data"));
|
||||
report_error(translate("gettextFromC", "Moved cache data to %s. Please try the operation again."), backup_path);
|
||||
free(backup_path);
|
||||
return -1;
|
||||
|
@ -884,7 +884,7 @@ static bool create_local_repo(struct git_info *info)
|
|||
error = 0;
|
||||
#if !defined(DEBUG) && !defined(SUBSURFACE_MOBILE)
|
||||
} else if (info->is_subsurface_cloud) {
|
||||
report_error(translate("gettextFromC", "Error connecting to Subsurface cloud storage"));
|
||||
report_error("%s", translate("gettextFromC", "Error connecting to Subsurface cloud storage"));
|
||||
#endif
|
||||
} else {
|
||||
report_error(translate("gettextFromC", "git clone of %s failed (%s)"), info->url, msg);
|
||||
|
|
|
@ -1500,7 +1500,7 @@ const char *do_libdivecomputer_import(device_data_t *data)
|
|||
rc = divecomputer_device_open(data);
|
||||
|
||||
if (rc != DC_STATUS_SUCCESS) {
|
||||
report_error(errmsg(rc));
|
||||
report_error("%s", errmsg(rc));
|
||||
} else {
|
||||
dev_info(data, "Connecting ...");
|
||||
rc = dc_device_open(&data->device, data->context, data->descriptor, data->iostream);
|
||||
|
|
|
@ -73,7 +73,7 @@ bool uploadDiveLogsDE::prepareDives(const QString &tempfile, bool selected)
|
|||
xslt = get_stylesheet("divelogs-export.xslt");
|
||||
if (!xslt) {
|
||||
qDebug() << errPrefix << "missing stylesheet";
|
||||
report_error(tr("Stylesheet to export to divelogs.de is not found").toUtf8());
|
||||
report_error("%s", qPrintable(tr("Stylesheet to export to divelogs.de is not found")));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -83,7 +83,7 @@ bool uploadDiveLogsDE::prepareDives(const QString &tempfile, bool selected)
|
|||
if (!zip) {
|
||||
char buffer[1024];
|
||||
zip_error_to_str(buffer, sizeof buffer, error_code, errno);
|
||||
report_error(tr("Failed to create zip file for upload: %s").toUtf8(), buffer);
|
||||
report_error(qPrintable(tr("Failed to create zip file for upload: %s")), buffer);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -144,7 +144,7 @@ bool uploadDiveLogsDE::prepareDives(const QString &tempfile, bool selected)
|
|||
xmlDoc *doc = xmlReadMemory(mb.buffer, mb.len, "divelog", NULL, XML_PARSE_HUGE | XML_PARSE_RECOVER);
|
||||
if (!doc) {
|
||||
qWarning() << errPrefix << "could not parse back into memory the XML file we've just created!";
|
||||
report_error(tr("internal error").toUtf8());
|
||||
report_error("%s", qPrintable(tr("internal error")));
|
||||
zip_close(zip);
|
||||
QFile::remove(tempfile);
|
||||
xsltFreeStylesheet(xslt);
|
||||
|
@ -157,7 +157,7 @@ bool uploadDiveLogsDE::prepareDives(const QString &tempfile, bool selected)
|
|||
free_xml_params(params);
|
||||
if (!transformed) {
|
||||
qWarning() << errPrefix << "XSLT transform failed for dive: " << i;
|
||||
report_error(tr("Conversion of dive %1 to divelogs.de format failed").arg(i).toUtf8());
|
||||
report_error("%s", qPrintable(tr("Conversion of dive %1 to divelogs.de format failed").arg(i)));
|
||||
continue;
|
||||
}
|
||||
xmlDocDumpMemory(transformed, (xmlChar **)&membuf, &streamsize);
|
||||
|
@ -310,7 +310,7 @@ void uploadDiveLogsDE::uploadFinishedSlot()
|
|||
if (parsed) {
|
||||
if (strstr(resp, "<Login>succeeded</Login>")) {
|
||||
if (strstr(resp, "<FileCopy>failed</FileCopy>")) {
|
||||
report_error(tr("Upload failed").toUtf8());
|
||||
report_error("%s", qPrintable(tr("Upload failed")));
|
||||
return;
|
||||
}
|
||||
timeout.stop();
|
||||
|
@ -320,13 +320,13 @@ void uploadDiveLogsDE::uploadFinishedSlot()
|
|||
}
|
||||
timeout.stop();
|
||||
err = tr("Login failed");
|
||||
report_error(err.toUtf8());
|
||||
report_error("%s", qPrintable(err));
|
||||
emit uploadFinish(false, err);
|
||||
return;
|
||||
}
|
||||
timeout.stop();
|
||||
err = tr("Cannot parse response");
|
||||
report_error(tr("Cannot parse response").toUtf8());
|
||||
report_error("%s", qPrintable(tr("Cannot parse response")));
|
||||
emit uploadFinish(false, err);
|
||||
}
|
||||
}
|
||||
|
@ -341,7 +341,7 @@ void uploadDiveLogsDE::uploadTimeoutSlot()
|
|||
}
|
||||
cleanupTempFile();
|
||||
QString err(tr("divelogs.de not responding"));
|
||||
report_error(err.toUtf8());
|
||||
report_error("%s", qPrintable(err));
|
||||
emit uploadFinish(false, err);
|
||||
}
|
||||
|
||||
|
@ -355,6 +355,6 @@ void uploadDiveLogsDE::uploadErrorSlot(QNetworkReply::NetworkError error)
|
|||
}
|
||||
cleanupTempFile();
|
||||
QString err(tr("network error %1").arg(error));
|
||||
report_error(err.toUtf8());
|
||||
report_error("%s", qPrintable(err));
|
||||
emit uploadFinish(false, err);
|
||||
}
|
||||
|
|
|
@ -100,7 +100,7 @@ void uploadDiveShare::uploadTimeoutSlot()
|
|||
reply = NULL;
|
||||
}
|
||||
QString err(tr("dive-share.com not responding"));
|
||||
report_error(err.toUtf8());
|
||||
report_error("%s", qPrintable(err));
|
||||
emit uploadFinish(false, err, QByteArray());
|
||||
}
|
||||
|
||||
|
@ -113,6 +113,6 @@ void uploadDiveShare::uploadErrorSlot(QNetworkReply::NetworkError error)
|
|||
reply = NULL;
|
||||
}
|
||||
QString err(tr("network error %1").arg(error));
|
||||
report_error(err.toUtf8());
|
||||
report_error("%s", qPrintable(err));
|
||||
emit uploadFinish(false, err, QByteArray());
|
||||
}
|
||||
|
|
|
@ -90,11 +90,11 @@ void VideoFrameExtractor::processItem(QString originalFilename, QString filename
|
|||
// Since we couldn't sart ffmpeg, turn off thumbnailing
|
||||
// TODO: call the proper preferences-functions
|
||||
prefs.extract_video_thumbnails = false;
|
||||
report_error(qPrintable(tr("ffmpeg failed to start - video thumbnail creation suspended. To enable video thumbnailing, set working executable in preferences.")));
|
||||
report_error("%s", qPrintable(tr("ffmpeg failed to start - video thumbnail creation suspended. To enable video thumbnailing, set working executable in preferences.")));
|
||||
return fail(originalFilename, duration, false);
|
||||
}
|
||||
if (!ffmpeg.waitForFinished()) {
|
||||
report_error(qPrintable(tr("Failed waiting for ffmpeg - video thumbnail creation suspended. To enable video thumbnailing, set working executable in preferences.")));
|
||||
report_error("%s", qPrintable(tr("Failed waiting for ffmpeg - video thumbnail creation suspended. To enable video thumbnailing, set working executable in preferences.")));
|
||||
return fail(originalFilename, duration, false);
|
||||
}
|
||||
|
||||
|
|
|
@ -884,7 +884,7 @@ void DiveListView::loadImagesFromURLs(const QString &urls)
|
|||
if (image.isNull()) {
|
||||
// If this is not an image, maybe it's an html file and Miika can provide some xslr magic to extract images.
|
||||
// In this case we would call the function recursively on the list of image source urls;
|
||||
report_error(qPrintable(tr("%1 does not appear to be an image").arg(url.toString())));
|
||||
report_error("%s", qPrintable(tr("%1 does not appear to be an image").arg(url.toString())));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -427,7 +427,7 @@ void MainWindow::on_actionCloudstorageopen_triggered()
|
|||
static bool saveToCloudOK()
|
||||
{
|
||||
if (!divelog.dives->nr) {
|
||||
report_error(qPrintable(gettextFromC::tr("Don't save an empty log to the cloud")));
|
||||
report_error("%s", qPrintable(gettextFromC::tr("Don't save an empty log to the cloud")));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -486,7 +486,7 @@ void MainWindow::on_actionCloudOnline_triggered()
|
|||
on_actionCloudstorageopen_triggered();
|
||||
}
|
||||
if (git_local_only)
|
||||
report_error(qPrintable(tr("Failure taking cloud storage online")));
|
||||
report_error("%s", qPrintable(tr("Failure taking cloud storage online")));
|
||||
}
|
||||
|
||||
setTitle();
|
||||
|
|
|
@ -242,7 +242,7 @@ void ProfileWidget2::plotDive(const struct dive *dIn, int dcIn, int flags)
|
|||
qDebug() << "Profile calculation for dive " << d->number << "took" << elapsedTime << "ms" << " -- calculated ceiling preference is" << prefs.calcceiling;
|
||||
if (elapsedTime > 1000 && prefs.calcndltts) {
|
||||
qPrefTechnicalDetails::set_calcndltts(false);
|
||||
report_error(qPrintable(tr("Show NDL / TTS was disabled because of excessive processing time")));
|
||||
report_error("%s", qPrintable(tr("Show NDL / TTS was disabled because of excessive processing time")));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue