diff --git a/src/scan.l b/src/scan.l index 8a460aba07..3d2d0e217f 100644 --- a/src/scan.l +++ b/src/scan.l @@ -346,7 +346,7 @@ when return TOK_WHEN; @DEBUG return TOK_DEBUG; // marks input for debugger -@PATH { +@DIR { string rval = current_scanned_file_path; if ( ! rval.empty() && rval[0] == '.' ) @@ -354,7 +354,7 @@ when return TOK_WHEN; char path[MAXPATHLEN]; if ( ! getcwd(path, MAXPATHLEN) ) - reporter->Error("getcwd failed: %s", strerror(errno)); + reporter->InternalError("getcwd failed: %s", strerror(errno)); else rval = string(path) + "/" + rval; } @@ -362,6 +362,18 @@ when return TOK_WHEN; RET_CONST(new StringVal(rval.c_str())); } +@FILENAME { + char* filename_copy = copy_string(::filename); + const char* bname = basename(filename_copy); + + if ( ! bname ) + reporter->InternalError("basename failed: %s", strerror(errno)); + + StringVal* rval = new StringVal(bname); + delete [] filename_copy; + RET_CONST(rval); + } + @load{WS}{FILE} { const char* new_file = skip_whitespace(yytext + 5); // Skip "@load". if ( generate_documentation ) diff --git a/testing/btest/Baseline/language.at-dir/out b/testing/btest/Baseline/language.at-dir/out new file mode 100644 index 0000000000..4cd8e27d6a --- /dev/null +++ b/testing/btest/Baseline/language.at-dir/out @@ -0,0 +1 @@ +/Users/jsiwek/Projects/bro/bro/testing/btest/.tmp/language.at-dir diff --git a/testing/btest/Baseline/language.at-path/out2 b/testing/btest/Baseline/language.at-dir/out2 similarity index 100% rename from testing/btest/Baseline/language.at-path/out2 rename to testing/btest/Baseline/language.at-dir/out2 diff --git a/testing/btest/Baseline/language.at-filename/out b/testing/btest/Baseline/language.at-filename/out new file mode 100644 index 0000000000..12cfb152d9 --- /dev/null +++ b/testing/btest/Baseline/language.at-filename/out @@ -0,0 +1 @@ +at-filename.bro diff --git a/testing/btest/Baseline/language.at-path/out b/testing/btest/Baseline/language.at-path/out deleted file mode 100644 index 7ac82c183c..0000000000 --- a/testing/btest/Baseline/language.at-path/out +++ /dev/null @@ -1 +0,0 @@ -/Users/jsiwek/Projects/bro/bro/testing/btest/.tmp/language.at-path diff --git a/testing/btest/language/at-path.bro b/testing/btest/language/at-dir.bro similarity index 91% rename from testing/btest/language/at-path.bro rename to testing/btest/language/at-dir.bro index 433db17835..b826e3a5da 100644 --- a/testing/btest/language/at-path.bro +++ b/testing/btest/language/at-dir.bro @@ -3,8 +3,8 @@ # @TEST-EXEC: bro -b ./pathtest.bro >out2 # @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out2 -print @PATH; +print @DIR; @TEST-START-FILE pathtest.bro -print @PATH; +print @DIR; @TEST-END-FILE diff --git a/testing/btest/language/at-filename.bro b/testing/btest/language/at-filename.bro new file mode 100644 index 0000000000..83e4e968f3 --- /dev/null +++ b/testing/btest/language/at-filename.bro @@ -0,0 +1,4 @@ +# @TEST-EXEC: bro -b %INPUT >out +# @TEST-EXEC: btest-diff out + +print @FILENAME;