if (end == string::npos)
return -1;
string header = module.substr(i, end - i);
- assert_regexp_match("@cast header", header, "^[a-z0-9/_.+-]+$");
- headers.push_back(header);
+ vector<string> matches;
+ if (regexp_match(header, "^[a-z0-9/_.+-]+$", matches))
+ {
+ if (! s.suppress_warnings)
+ cerr << "Warning: skipping malformed @cast header \""
+ << header << "\"" << endl;
+ }
+ else
+ headers.push_back(header);
}
if (headers.empty())
return -1;
}
-static void
+static int
create_temp_dir (systemtap_session &s)
{
if (!s.tmpdir.empty())
- return;
+ return 0;
// Create a temporary directory to build within.
// Be careful with this, as "tmpdir" is "rm -rf"'d at the end.
//we can't make the directory due to the error
cerr << autosprintf(_("ERROR: cannot create temporary directory (\" %s \"): %s"), tmpdirt.c_str(), e) << endl;
//cerr << "ERROR: cannot create temporary directory (\"" << tmpdirt << "\"): " << e << endl;
- exit (1); // die
+ return 1;
}
else
s.tmpdir = tmpdir_name;
if (s.verbose>1)
clog << autosprintf(_("Created temporary directory \"%s\""), s.tmpdir.c_str()) << endl;
//clog << "Created temporary directory \"" << s.tmpdir << "\"" << endl;
+ return 0;
}
static void
{
int rc = 0;
+ // If we don't know the release, there's no hope either locally or on a server.
+ if (s.kernel_release.empty())
+ {
+ if (s.kernel_build_tree.empty())
+ cerr << _("ERROR: kernel release isn't specified") << endl;
+ else
+ cerr << autosprintf(_("ERROR: kernel release isn't found in \"%s\""),
+ s.kernel_build_tree.c_str()) << endl;
+ return 1;
+ }
+
// Create a temporary directory to build within.
// Be careful with this, as "s.tmpdir" is "rm -rf"'d at the end.
- create_temp_dir (s);
+ rc = create_temp_dir (s);
+ if (rc)
+ return rc;
// Perform passes 0 through 4 using a compile server?
if (! s.specified_servers.empty ())
// If requested, manage trust of servers. This is independent of other tasks.
manage_server_trust (s);
+ // Some of the remote methods need to write temporary data, so go ahead
+ // and create the main tempdir now.
+ rc = create_temp_dir (s);
+
// Run the passes only if a script has been specified. The requirement for
// a script has already been checked in systemtap_session::check_options.
- if (s.have_script)
+ if (rc == 0 && s.have_script)
{
- // Some of the remote methods need to write temporary data, so go ahead
- // and create the main tempdir now.
- create_temp_dir (s);
-
vector<remote*> targets;
if (s.remote_uris.empty())
{
void
systemtap_session::setup_kernel_release (const char* kstr)
{
+ kernel_release = kernel_build_tree = kernel_source_tree = "";
if (kstr[0] == '/') // fully specified path
{
kernel_build_tree = kstr;
ifstream version_file (version_file_name.c_str());
if (version_file.fail ())
{
- cerr << autosprintf(_("Missing %s"), version_file_name.c_str()) << endl;
- exit(1);
+ if (verbose > 1)
+ cerr << autosprintf(_("Missing %s"), version_file_name.c_str()) << endl;
+ return; // pass0 will realize the failure
}
else
{
char c;
- kernel_release = "";
while (version_file.get(c) && c != '\n')
kernel_release.push_back(c);
}
else
{
kernel_release = string (kstr);
- kernel_build_tree = "/lib/modules/" + kernel_release + "/build";
+ if (!kernel_release.empty())
+ kernel_build_tree = "/lib/modules/" + kernel_release + "/build";
// PR10745
// Let's not look for the kernel_source_tree; it's definitely