diff mbox series

util/cutils: Skip "." when looking for next directory component

Message ID 20210208205752.2488774-1-sw@weilnetz.de
State New
Headers show
Series util/cutils: Skip "." when looking for next directory component | expand

Commit Message

Stefan Weil Feb. 8, 2021, 8:57 p.m. UTC
When looking for the next directory component, a "." component is now skipped.

This fixes the path(s) used for firmware lookup for the prefix == bindir case
which is standard for QEMU on Windows and where the internally
used bindir value ends with "/.".

Signed-off-by: Stefan Weil <sw@weilnetz.de>
---

This patch is required for Windows to get the firmware access right,
but would also be needed for Linux with --bindir=/usr/local which
currently results in a search path like /usr/local/../share/qemu-firmware.

I noticed that qemu-firmware is not used during the installation.
What is the purpose of that extra search path?

Stefan

 util/cutils.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Paolo Bonzini Feb. 9, 2021, 9:20 a.m. UTC | #1
On 08/02/21 21:57, Stefan Weil wrote:
> When looking for the next directory component, a "." component is now skipped.
> 
> This fixes the path(s) used for firmware lookup for the prefix == bindir case
> which is standard for QEMU on Windows and where the internally
> used bindir value ends with "/.".
> 
> Signed-off-by: Stefan Weil <sw@weilnetz.de>
> ---
> 
> This patch is required for Windows to get the firmware access right,
> but would also be needed for Linux with --bindir=/usr/local which
> currently results in a search path like /usr/local/../share/qemu-firmware.
> 
> I noticed that qemu-firmware is not used during the installation.
> What is the purpose of that extra search path?
> 
> Stefan
> 
>   util/cutils.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/util/cutils.c b/util/cutils.c
> index 0b5073b330..70c7d6efbd 100644
> --- a/util/cutils.c
> +++ b/util/cutils.c
> @@ -916,7 +916,8 @@ static inline bool starts_with_prefix(const char *dir)
>   static inline const char *next_component(const char *dir, int *p_len)
>   {
>       int len;
> -    while (*dir && G_IS_DIR_SEPARATOR(*dir)) {
> +    while ((*dir && G_IS_DIR_SEPARATOR(*dir)) ||
> +           (*dir == '.' && (G_IS_DIR_SEPARATOR(dir[1]) || dir[1] == '\0'))) {
>           dir++;
>       }
>       len = 0;
> 

Queued, thanks.

Paolo
diff mbox series

Patch

diff --git a/util/cutils.c b/util/cutils.c
index 0b5073b330..70c7d6efbd 100644
--- a/util/cutils.c
+++ b/util/cutils.c
@@ -916,7 +916,8 @@  static inline bool starts_with_prefix(const char *dir)
 static inline const char *next_component(const char *dir, int *p_len)
 {
     int len;
-    while (*dir && G_IS_DIR_SEPARATOR(*dir)) {
+    while ((*dir && G_IS_DIR_SEPARATOR(*dir)) ||
+           (*dir == '.' && (G_IS_DIR_SEPARATOR(dir[1]) || dir[1] == '\0'))) {
         dir++;
     }
     len = 0;