From: Boqun Feng <boqun.feng@gmail.com>
To: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
Cc: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org,
ojeda@kernel.org, alex.gaynor@gmail.com, gary@garyguo.net,
bjorn3_gh@protonmail.com, benno.lossin@proton.me,
a.hindborg@samsung.com, aliceryhl@google.com, tmgross@umich.edu,
dakr@kernel.org, mingo@redhat.com, peterz@infradead.org,
juri.lelli@redhat.com, vincent.guittot@linaro.org,
dietmar.eggemann@arm.com, rostedt@goodmis.org,
bsegall@google.com, mgorman@suse.de, vschneid@redhat.com,
pmladek@suse.com, fujita.tomonori@gmail.com, mingo@kernel.org
Subject: Re: [PATCH v3 1/2] rust: Introduce file_from_location()
Date: Tue, 17 Jun 2025 11:11:59 -0700 [thread overview]
Message-ID: <aFGv7-0PzewfS5kr@tardis.local> (raw)
In-Reply-To: <CANiq72neJ-1e9Cef5RJMdJGEqWVEW7F72_J0GcDpJuEd_APrxA@mail.gmail.com>
On Tue, Jun 17, 2025 at 07:21:06PM +0200, Miguel Ojeda wrote:
> On Tue, Jun 17, 2025 at 6:58 PM Boqun Feng <boqun.feng@gmail.com> wrote:
> >
> > This actually helped me find a bug in the current implementation: I
> > should use core::ffi::CStr::to_bytes_with_nul() instead of to_bytes().
> > Please see below for the update "Examples" section:
>
> Yeah, writing examples can force us to find issues :)
>
> I guess we could conditionally (`cfg`) assert in the "otherwise" case,
> since we already had one case, but I didn't suggest it earlier because
> it is a bit heavy, and the interesting case is the other one anyway so
> it wouldn't have caught the issue. I guess we could assert it ends
> with `.rs` for the interesting one.
>
We already know the full function name from Location::file() ;-) so the
assertion is easy:
assert_eq!(Ok(caller.file()), file_from_location(caller).to_str());
I didn't add the assertion of the otherwise case because that would
involve either writing another string "<Location ... not supported>" or
define it as a const, both are a bit overkilling to me.
> By the way, I would avoid the actual filename, i.e. I would give a
> more "normal" example instead of the `doctests_kernel_generated` one
Good point.
> of the example itself. Something like:
>
> // Output:
> // - A path like `rust/kernel/example.rs` if `file_with_nul()` is available.
> // - `<Location::file_with_nul() not supported>` otherwise.
>
> It could make sense to have an intermediate variable (especially if
> you end up asserting anything), then you could put the comment on top
> of that instead. Then the `pr_*` call could then perhaps show a
> "realistic" example, and could inline the variable name, e.g.
> something like `{caller_file}: my message\n`.
>
How aobut something below? (I use "" instead of `` on purpose because
the output variable there is a string)
/// Gets the C string file name of a [`Location`].
///
/// If `file_with_nul()` is not available, returns a string that warns about it.
///
/// [`Location`]: core::panic::Location
///
/// # Examples
///
/// ```
/// # use kernel::file_from_location;
///
/// #[track_caller]
/// fn foo() {
/// let caller = core::panic::Location::caller();
///
/// // Output:
/// // - A path like "rust/kernel/example.rs" if file_with_nul() available.
/// // - "<Location::file_with_nul() not supported>" otherwise.
/// let caller_file: &kernel::str::CStr = file_from_location(caller);
///
/// // Prints out the message with caller's file name.
/// pr_info!("foo() called in file {caller_file}\n");
///
/// # if cfg!(CONFIG_RUSTC_HAS_FILE_WITH_NUL) {
/// # assert_eq!(Ok(caller.file()), caller_file.to_str());
/// # }
/// }
///
/// # foo();
/// ```
> Anyway, no big deal either way, what you had is also OK.
>
> By the way, I noticed a typo in "with a NUL terminated." above.
>
You mean it should be "with an NUL terminated"? Or it should be "with
a `NUL` byte terminated"?
Regards,
Boqun
> Cheers,
> Miguel
next prev parent reply other threads:[~2025-06-17 18:12 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-16 15:36 [PATCH v3 0/2] Add Rust version of might_sleep() Boqun Feng
2025-06-16 15:36 ` [PATCH v3 1/2] rust: Introduce file_from_location() Boqun Feng
2025-06-16 21:19 ` Miguel Ojeda
2025-06-17 9:25 ` Alice Ryhl
2025-06-17 16:26 ` Miguel Ojeda
2025-06-17 13:42 ` Boqun Feng
2025-06-17 15:28 ` Miguel Ojeda
2025-06-17 16:58 ` Boqun Feng
2025-06-17 17:21 ` Miguel Ojeda
2025-06-17 18:11 ` Boqun Feng [this message]
2025-06-17 18:22 ` Miguel Ojeda
2025-06-17 20:33 ` John Hubbard
2025-06-17 21:57 ` Boqun Feng
2025-06-16 15:36 ` [PATCH v3 2/2] rust: task: Add Rust version of might_sleep() Boqun Feng
2025-06-16 21:28 ` Miguel Ojeda
2025-06-17 3:04 ` FUJITA Tomonori
2025-06-17 8:02 ` Miguel Ojeda
2025-06-17 12:42 ` FUJITA Tomonori
2025-06-17 14:00 ` Boqun Feng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aFGv7-0PzewfS5kr@tardis.local \
--to=boqun.feng@gmail.com \
--cc=a.hindborg@samsung.com \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=bsegall@google.com \
--cc=dakr@kernel.org \
--cc=dietmar.eggemann@arm.com \
--cc=fujita.tomonori@gmail.com \
--cc=gary@garyguo.net \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=miguel.ojeda.sandonis@gmail.com \
--cc=mingo@kernel.org \
--cc=mingo@redhat.com \
--cc=ojeda@kernel.org \
--cc=peterz@infradead.org \
--cc=pmladek@suse.com \
--cc=rostedt@goodmis.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tmgross@umich.edu \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).