From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gnu.wildebeest.org (gnu.wildebeest.org [45.83.234.184]) by sourceware.org (Postfix) with ESMTPS id 05FD83858D28 for ; Mon, 8 Apr 2024 14:11:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 05FD83858D28 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=klomp.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=klomp.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 05FD83858D28 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=45.83.234.184 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712585478; cv=none; b=YuT2uDUz1NqpZc559BybJXb8lkNeD1go2IuJ7cYp1P8P95MlPxgzJHZebPFO1rjtVRqROig4fN/g7f+mcHs3dqek2Suw87NkoARU+sBc6fyvp3oycKWdavwXa4M1YNb7JtHfqoFXu/JbCEvhC0KlbyIcFG7p8y8IIJ5P4mcpfgY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712585478; c=relaxed/simple; bh=2tB9/oWlwMSp6qemqZzjAaPFf6zCcuInGCInzn/1dA4=; h=Message-ID:Subject:From:To:Date:MIME-Version; b=fmMC+AcQwV/j46PQRTV6t/CKL8asbkoHRmUNRT6jkV/ecKARVPAGKAo8pgDvgWFdIZvlIsQwUlyDRJ2/4norciId0tSg9xUDXJaM5yzvpVT7tlBVhahKgmJfl2FOliWf+yBIWVtnBrXi5efqGSxuuqp7ftQFpoUb0/kKtxo7v5Q= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from r6.localdomain (82-217-174-174.cable.dynamic.v4.ziggo.nl [82.217.174.174]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by gnu.wildebeest.org (Postfix) with ESMTPSA id 867093000595; Mon, 8 Apr 2024 16:11:14 +0200 (CEST) Received: by r6.localdomain (Postfix, from userid 1000) id B78B134049C; Mon, 8 Apr 2024 16:11:13 +0200 (CEST) Message-ID: <3829b8421ba8245230d3862e5939a4270b0fd8fa.camel@klomp.org> Subject: Re: [PATCH] debugedit: Add support for converting dos paths to unix paths From: Mark Wielaard To: Andrew Strauss , debugedit@sourceware.org Date: Mon, 08 Apr 2024 16:11:13 +0200 In-Reply-To: References: Autocrypt: addr=mark@klomp.org; prefer-encrypt=mutual; keydata=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 QifSU1tvZxQ== Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.50.4 (3.50.4-1.fc39) MIME-Version: 1.0 X-Spam-Status: No, score=-8.0 required=5.0 tests=BAYES_00,GIT_PATCH_0,JMQ_SPF_NEUTRAL,KAM_DMARC_STATUS,RCVD_IN_BARRACUDACENTRAL,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi Andrew, On Sun, 2024-01-14 at 13:24 -0500, Andrew Strauss wrote: > When replacing paths using the --base-dir and --dest-dir debugedit curren= tly > cannot handle paths that use '\' as the directory separator. This patch a= dds > the --fix-dos-paths (-p) option to replace all `\`'s with a '/'. The norm= al > -b and -d flags can then be used to transform the result into a valid pat= h. Sorry I missed this earlier. I think the patch looks OK in principle. But we have to double check we can simply cast away the const everywhere. And the indentation looks odd in a few places (tab vs space?). But when/how do you get DOS paths in your DWARF? And shouldn't all paths be converted back the DOS after replacement? Thanks, Mark > Signed-off-by: Andrew Strauss > --- > =C2=A0tools/debugedit.c | 38 +++++++++++++++++++++++++++++++++++--- > =C2=A01 file changed, 35 insertions(+), 3 deletions(-) >=20 > diff --git a/tools/debugedit.c b/tools/debugedit.c > index 7802f9f..24b7d19 100644 > --- a/tools/debugedit.c > +++ b/tools/debugedit.c > @@ -92,6 +92,7 @@ char *list_file =3D NULL; > =C2=A0int list_file_fd =3D -1; > =C2=A0int do_build_id =3D 0; > =C2=A0int no_recompute_build_id =3D 0; > +int fix_dos_paths =3D 0; > =C2=A0char *build_id_seed =3D NULL; > =C2=A0 > =C2=A0int show_version =3D 0; > @@ -984,6 +985,17 @@ canonicalize_path (const char *s, char *d) > =C2=A0 =C2=A0return rv; > =C2=A0} > =C2=A0 > +/* Replaces \ directory separators with / */ > +void > +fix_dir_separator (char *s) > +{ > + =C2=A0for (char *c =3D s; *c; c++) { > + =C2=A0 =C2=A0if (*c =3D=3D '\\') { > + =C2=A0 =C2=A0 =C2=A0*c =3D '/'; > + =C2=A0 =C2=A0} > + =C2=A0} > +} > + > =C2=A0/* Returns the rest of PATH if it starts with DIR_PREFIX, skipping = any > =C2=A0 =C2=A0 / path separators, or NULL if PATH doesn't start with > =C2=A0 =C2=A0 DIR_PREFIX. Might return the empty string if PATH equals DI= R_PREFIX > @@ -1153,6 +1165,8 @@ record_file_string_entry_idx (bool line_strp, DSO *= dso, size_t old_idx) > =C2=A0 > =C2=A0 =C2=A0 =C2=A0 =C2=A0Strent *strent; > =C2=A0 =C2=A0 =C2=A0 =C2=A0const char *old_str =3D (char *)sec->data + ol= d_idx; > + =C2=A0 =C2=A0 =C2=A0if (fix_dos_paths) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0fix_dir_separator ((char *)old_str); > =C2=A0 =C2=A0 =C2=A0 =C2=A0const char *file =3D skip_dir_prefix (old_str,= base_dir); > =C2=A0 =C2=A0 =C2=A0 =C2=A0if (file =3D=3D NULL) > =C2=A0 { > @@ -1514,6 +1528,8 @@ edit_dwarf2_line (DSO *dso) > =C2=A0 =C2=A0const char *file_path =3D NULL; > =C2=A0 =C2=A0if (t->replace_dirs) > =C2=A0 =C2=A0 =C2=A0{ > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (fix_dos_paths) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0fix_dir_separato= r ((char *)dir); > =C2=A0 =C2=A0 =C2=A0 =C2=A0file_path =3D skip_dir_prefix (dir, base_dir); > =C2=A0 =C2=A0 =C2=A0 =C2=A0if (file_path !=3D NULL) > =C2=A0 { > @@ -1551,6 +1567,8 @@ edit_dwarf2_line (DSO *dso) > =C2=A0 =C2=A0 =C2=A0 =C2=A0const char *file_path =3D NULL; > =C2=A0 =C2=A0 =C2=A0 =C2=A0if (t->replace_files) > =C2=A0 { > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (fix_d= os_paths) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0fi= x_dir_separator ((char *)file); > =C2=A0 =C2=A0file_path =3D skip_dir_prefix (file, base_dir); > =C2=A0 =C2=A0if (file_path !=3D NULL) > =C2=A0 =C2=A0 =C2=A0{ > @@ -1753,6 +1771,8 @@ read_dwarf4_line (DSO *dso, unsigned char *ptr, cha= r *comp_dir, > =C2=A0 =C2=A0 =C2=A0 =C2=A0if (base_dir && dest_dir) > =C2=A0 { > =C2=A0 =C2=A0/* Do we need to replace any of the dirs? Calculate new size= . */ > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (fix_dos_paths) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0fix_dir_separator ((char *)ptr= ); > =C2=A0 =C2=A0const char *file_path =3D skip_dir_prefix ((const char *)ptr= , > =C2=A0 =C2=A0 base_dir); > =C2=A0 =C2=A0if (file_path !=3D NULL) > @@ -1802,6 +1822,8 @@ read_dwarf4_line (DSO *dso, unsigned char *ptr, cha= r *comp_dir, > =C2=A0 =C2=A0 =C2=A0 =C2=A0if (base_dir && dest_dir) > =C2=A0 { > =C2=A0 =C2=A0/* Do we need to replace any of the files? Calculate new siz= e. */ > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (fix_dos_paths) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0fix_dir_separator ((char *)dir= ); > =C2=A0 =C2=A0const char *file_path =3D skip_dir_prefix (file, base_dir); > =C2=A0 =C2=A0if (file_path !=3D NULL) > =C2=A0 =C2=A0 =C2=A0{ > @@ -2277,6 +2299,8 @@ edit_attributes (DSO *dso, unsigned char *ptr, stru= ct abbrev_tag *t, int phase) > =C2=A0 =C2=A0 =C2=A0 =C2=A0if (form =3D=3D DW_FORM_string) > =C2=A0 { > =C2=A0 =C2=A0free (comp_dir); > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (fix_d= os_paths) > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0fi= x_dir_separator ((char *)ptr); > =C2=A0 =C2=A0comp_dir =3D strdup ((char *)ptr); > =C2=A0 > =C2=A0 =C2=A0if (dest_dir) > @@ -3203,13 +3227,14 @@ static struct option optionsTable[] =3D > =C2=A0 =C2=A0 =C2=A0{ "build-id", no_argument, 0, 'i' }, > =C2=A0 =C2=A0 =C2=A0{ "build-id-seed", required_argument, 0, 's' }, > =C2=A0 =C2=A0 =C2=A0{ "no-recompute-build-id", no_argument, 0, 'n' }, > + =C2=A0 =C2=A0{ "fix-dos-paths", no_argument, 0, 'p' }, > =C2=A0 =C2=A0 =C2=A0{ "version", no_argument, 0, 'V' }, > =C2=A0 =C2=A0 =C2=A0{ "help", no_argument, 0, '?' }, > =C2=A0 =C2=A0 =C2=A0{ "usage", no_argument, 0, 'u' }, > =C2=A0 =C2=A0 =C2=A0{ NULL, 0, 0, 0 } > =C2=A0 =C2=A0}; > =C2=A0 > -static const char *optionsChars =3D "b:d:l:is:nV?u"; > +static const char *optionsChars =3D "b:d:l:is:npV?u"; > =C2=A0 > =C2=A0static const char *helpText =3D > =C2=A0 =C2=A0"Usage: %s [OPTION...] FILE\n" > @@ -3223,6 +3248,8 @@ static const char *helpText =3D > =C2=A0 =C2=A0" =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0this string a= s hash seed\n" > =C2=A0 =C2=A0" =C2=A0-n, --no-recompute-build-id =C2=A0 =C2=A0 do not rec= ompute build ID note even\n" > =C2=A0 =C2=A0" =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0when -i or -s= are given\n" > + =C2=A0" =C2=A0-p, --fix-dos-paths =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 convert dos directory separators (\\) to\n" > + =C2=A0" =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0unix (/)\n" > =C2=A0 =C2=A0"\n" > =C2=A0 =C2=A0"Help options:\n" > =C2=A0 =C2=A0" =C2=A0-?, --help =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Show this help message\n" > @@ -3233,8 +3260,9 @@ static const char *usageText =3D > =C2=A0 =C2=A0"Usage: %s [-in?] [-b|--base-dir STRING] [-d|--dest-dir STRI= NG]\n" > =C2=A0 =C2=A0" =C2=A0 =C2=A0 =C2=A0 =C2=A0[-l|--list-file STRING] [-i|--b= uild-id] \n" > =C2=A0 =C2=A0" =C2=A0 =C2=A0 =C2=A0 =C2=A0[-s|--build-id-seed STRING]\n" > - =C2=A0" =C2=A0 =C2=A0 =C2=A0 =C2=A0[-n|--no-recompute-build-id] [-?|--h= elp] [-u|--usage]\n" > - =C2=A0" =C2=A0 =C2=A0 =C2=A0 =C2=A0[-V|--version] FILE\n"; > + =C2=A0" =C2=A0 =C2=A0 =C2=A0 =C2=A0[-n|--no-recompute-build-id]\n" > + =C2=A0" =C2=A0 =C2=A0 =C2=A0 =C2=A0[-p|--fix-dos-paths]\n" > + =C2=A0" =C2=A0 =C2=A0 =C2=A0 =C2=A0[-?|--help] [-u|--usage] [-V|--versi= on] FILE\n"; > =C2=A0 > =C2=A0static void > =C2=A0help (const char *progname, bool error) > @@ -3536,6 +3564,10 @@ main (int argc, char *argv[]) > =C2=A0 =C2=A0no_recompute_build_id =3D 1; > =C2=A0 =C2=A0break; > =C2=A0 > + =C2=A0 =C2=A0 =C2=A0 =C2=A0case 'p': > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0fix_dos_paths =3D 1; > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break; > + > =C2=A0 case 'V': > =C2=A0 =C2=A0show_version =3D 1; > =C2=A0 =C2=A0break;