summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2012-03-13 01:23:44 +0000
committerCarl Hetherington <carl@carlh.net>2012-03-13 01:23:44 +0000
commitca19d2af163728d9a48d46acec895d65bfd81e0b (patch)
tree25353aefd989c7655d180c83d52a68d144031ae6 /libs/ardour
parentb4999fbc1408fa2fb49861e8b9d07fca5f7d65b3 (diff)
Use fgets and sscanf to read numbers rather than fscanf, avoiding strange occurrence of fscanf (..., %dn, ...) eating a blank line immediately after the number that it reads; fix erroneous warning about failure to get VST information.
git-svn-id: svn://localhost/ardour2/branches/3.0@11658 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/linux_vst_info_file.cc48
1 files changed, 33 insertions, 15 deletions
diff --git a/libs/ardour/linux_vst_info_file.cc b/libs/ardour/linux_vst_info_file.cc
index 9fae93f835..83cbfe4a56 100644
--- a/libs/ardour/linux_vst_info_file.cc
+++ b/libs/ardour/linux_vst_info_file.cc
@@ -45,6 +45,22 @@ static char* read_string(FILE *fp)
}
}
+/** Read an integer value from a line in fp into n,
+ * @return true on success, false on failure.
+ */
+static bool
+read_int (FILE* fp, int* n)
+{
+ char buf[MAX_STRING_LEN];
+
+ char* p = fgets (buf, MAX_STRING_LEN, fp);
+ if (p == 0) {
+ return false;
+ }
+
+ return (sscanf (p, "%d", n) != 1);
+}
+
static VSTInfo *
load_vstfx_info_file (FILE* fp)
{
@@ -54,23 +70,23 @@ load_vstfx_info_file (FILE* fp)
return 0;
}
- if((info->name = read_string(fp)) == 0) goto error;
- if((info->creator = read_string(fp)) == 0) goto error;
- if(1 != fscanf(fp, "%d\n", &info->UniqueID)) goto error;
- if((info->Category = read_string(fp)) == 0) goto error;
- if(1 != fscanf(fp, "%d\n", &info->numInputs)) goto error;
- if(1 != fscanf(fp, "%d\n", &info->numOutputs)) goto error;
- if(1 != fscanf(fp, "%d\n", &info->numParams)) goto error;
- if(1 != fscanf(fp, "%d\n", &info->wantMidi)) goto error;
- if(1 != fscanf(fp, "%d\n", &info->hasEditor)) goto error;
- if(1 != fscanf(fp, "%d\n", &info->canProcessReplacing)) goto error;
-
- if((info->ParamNames = (char **) malloc(sizeof(char*)*info->numParams)) == 0) {
+ if ((info->name = read_string(fp)) == 0) goto error;
+ if ((info->creator = read_string(fp)) == 0) goto error;
+ if (read_int (fp, &info->UniqueID)) goto error;
+ if ((info->Category = read_string(fp)) == 0) goto error;
+ if (read_int (fp, &info->numInputs)) goto error;
+ if (read_int (fp, &info->numOutputs)) goto error;
+ if (read_int (fp, &info->numParams)) goto error;
+ if (read_int (fp, &info->wantMidi)) goto error;
+ if (read_int (fp, &info->hasEditor)) goto error;
+ if (read_int (fp, &info->canProcessReplacing)) goto error;
+
+ if ((info->ParamNames = (char **) malloc(sizeof(char*)*info->numParams)) == 0) {
goto error;
}
for (int i = 0; i < info->numParams; ++i) {
- if((info->ParamNames[i] = read_string(fp)) == 0) goto error;
+ if ((info->ParamNames[i] = read_string(fp)) == 0) goto error;
}
if ((info->ParamLabels = (char **) malloc(sizeof(char*)*info->numParams)) == 0) {
@@ -78,7 +94,7 @@ load_vstfx_info_file (FILE* fp)
}
for (int i = 0; i < info->numParams; ++i) {
- if((info->ParamLabels[i] = read_string(fp)) == 0) goto error;
+ if ((info->ParamLabels[i] = read_string(fp)) == 0) goto error;
}
return info;
@@ -369,7 +385,9 @@ vstfx_get_info (char* dllpath)
VSTInfo *info;
info = load_vstfx_info_file (infofile);
fclose (infofile);
- PBD::warning << "Cannot get LinuxVST information form " << dllpath << ": info file load failed." << endmsg;
+ if (info == 0) {
+ PBD::warning << "Cannot get LinuxVST information form " << dllpath << ": info file load failed." << endmsg;
+ }
return info;
}