Holen des Issue durch eigene Hilfsfunktionen.
Mit ID, Hash-ID und Pfad gibt es 3 Moeglichkeiten an einen oder mehrere
Issues zu kommen, das in jeder Funktion zu behandeln waere unpraktisch,
daher gibt es jetzt get_issue() fuer einzelne Fehler und get_issues(),
fuer den Fall, dass man noch nicht weiss, ob einer oder mehrere gemeint
sind.
Change-Id: I98e5ea2064bf42048064fa8b63af697961db89ff
diff --git a/obj/tools/fehlerteufel.c b/obj/tools/fehlerteufel.c
index c8bbba5..afc7fe2 100644
--- a/obj/tools/fehlerteufel.c
+++ b/obj/tools/fehlerteufel.c
@@ -50,6 +50,8 @@
// ************** private functions **************
private varargs int get_issuelist(int lmodus);
private void get_uids();
+private struct fullissue_s get_issue(string arg);
+private struct fullissue_s|struct fullissue_s* get_issues(string arg);
// irgendeinen Fehler oder Warnung anzeigen.
private int show_entry(struct fullissue_s issue)
@@ -158,57 +160,19 @@
public int CmdFehlerZeigen(string arg)
{
- int issueid;
-
- if (stringp(arg) && sizeof(arg))
- {
- arg = trim(arg, TRIM_BOTH);
- issueid = to_int(arg);
- }
- else
- {
- issueid = lfehler;
- arg = to_string(issueid);
- }
+ struct fullissue_s|struct fullissue_s* issues=get_issues(arg);
notify_fail("Einen Eintrag mit dieser ID gibt es nicht!\n");
- // Mit einem / am Anfang ist arg wohl ein Filename, wenn to_string(issueid)
- // == arg wird die Issueid von oben genommen.
- struct fullissue_s issue;
- struct fullissue_s *issues;
- if (arg[0] == '/')
+ if (structp(issues))
{
- issues=({});
- foreach(int m: ALL_ERR_TYPES)
- {
- if (!(m & modus))
- continue;
- struct fullissue_s *tmp =
- (struct fullissue_s *)ERRORD->QueryIssuesByFile(arg, m);
- if (tmp)
- issues+=tmp;
- }
- if (!sizeof(issues))
- issues=0;
- }
- else if (to_string(issueid) == arg)
- issue = (struct fullissue_s)ERRORD->QueryIssueByID(issueid);
- else
- issue = (struct fullissue_s)ERRORD->QueryIssueByHash(arg);
-
- if (structp(issue))
- {
- show_entry(issue);
+ show_entry(issues);
// letzten Fehler merken.
- lfehler = issueid;
+ lfehler = issues->id;
return 1;
}
- // Wenn das nicht erfolgreich ist, ist das Argument evtl. ein Objekt-,
- // Programm- oder Ladename. In dem Fall alle von denen anzeigen, die passen
- // hierbei wird der Typ NICHT beruecksichtigt.
else if (pointerp(issues))
{
- foreach(issue : issues)
+ foreach(struct fullissue_s issue : issues)
{
show_entry(issue);
}
@@ -1005,6 +969,57 @@
}
}
}
+
return count;
}
+private struct fullissue_s get_issue(string arg)
+{
+ int issueid;
+ struct fullissue_s issue;
+
+ if (stringp(arg) && sizeof(arg))
+ {
+ arg = trim(arg, TRIM_BOTH);
+ issueid = to_int(arg);
+ }
+ else
+ {
+ issueid = lfehler;
+ arg = to_string(issueid);
+ }
+
+ // Wurde ein Hash uebergeben, ist issueid 0 und arg der Hash.
+ // Wurde eine ID oder nichts uebergeben, ist issueid die ID als int und
+ // arg die ID als string.
+ if (to_string(issueid) == arg)
+ issue = (struct fullissue_s)ERRORD->QueryIssueByID(issueid);
+ else
+ issue = (struct fullissue_s)ERRORD->QueryIssueByHash(arg);
+ return issue;
+}
+
+private struct fullissue_s|struct fullissue_s* get_issues(string arg)
+{
+ struct fullissue_s|struct fullissue_s* issues;
+ // Mit einem / am Anfang ist arg wohl ein Filename.
+ if (sizeof(arg) && arg[0] == '/')
+ {
+ issues=({});
+ foreach(int m: ALL_ERR_TYPES)
+ {
+ if (!(m & modus))
+ continue;
+ struct fullissue_s *tmp =
+ (struct fullissue_s *)ERRORD->QueryIssuesByFile(arg, m);
+ if (tmp)
+ issues+=tmp;
+ }
+ if (!sizeof(issues))
+ issues=0;
+ }
+ else
+ issues=get_issue(arg);
+
+ return issues;
+}