rust-for-linux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

  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).