[PATCH v2 2/5] Get rid of "gdb_dirbuf" and use "getcwd (NULL, 0)"

Sergio Durigan Junior sergiodj@redhat.com
Wed Sep 20 17:02:00 GMT 2017


On Wednesday, September 20 2017, Pedro Alves wrote:

> On 09/19/2017 05:28 AM, Sergio Durigan Junior wrote:
>> Currently we have "current_directory" and "gdb_dirbuf" globals, which
>> means that we basically have two possible places to consult when we
>> want to know GDB's current working directory.
>> 
>> This is not ideal and can lead to confusion.  Moreover, the way we're
>> using "gdb_difbuf" along with "getcwd" is problematic because we
>> declare the buffer with "1024" elements hardcoded, which does not take
>> into account longer pathnames that are possible in many filesystems.
>> Using "PATH_MAX" would also not be a solution because of portability
>> problems.  Therefore, the best solution is to rely on the fact that
>> "getcwd (NULL, 0)" will "do the right thing" and return a
>> heap-allocated string containing the full path.  With the new "getcwd"
>> module from gnulib, it is now possible to do that without worrying
>> about breaking some target.
>
> s/target/host/

Fixed.

>> --- a/gdb/cli/cli-cmds.c
>> +++ b/gdb/cli/cli-cmds.c
>> @@ -382,13 +382,16 @@ pwd_command (char *args, int from_tty)
>>  {
>>    if (args)
>>      error (_("The \"pwd\" command does not take an argument: %s"), args);
>> -  if (! getcwd (gdb_dirbuf, sizeof (gdb_dirbuf)))
>> +
>> +  gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0));
>> +
>> +  if (cwd.get () == NULL)
>
> No need for get() here:
>
>   if (cwd == NULL)

Fixed.

>> diff --git a/gdb/mi/mi-cmd-env.c b/gdb/mi/mi-cmd-env.c
>> index 977b6e274d..1e4c09352f 100644
>> --- a/gdb/mi/mi-cmd-env.c
>> +++ b/gdb/mi/mi-cmd-env.c
>> @@ -73,12 +73,12 @@ mi_cmd_env_pwd (const char *command, char **argv, int argc)
>>      }
>>       
>>    /* Otherwise the mi level is 2 or higher.  */
>> -
>> -  if (! getcwd (gdb_dirbuf, sizeof (gdb_dirbuf)))
>> +  gdb::unique_xmalloc_ptr<char> cwd (getcwd (NULL, 0));
>> +  if (cwd.get () == NULL)
>
> Ditto.

Fixed.

> Otherwise OK.
>
> Thanks,
> Pedro Alves

I'll wait until the other patches are approved to push this one, since
it depends on gnulib's getcwd.

Thanks,

-- 
Sergio
GPG key ID: 237A 54B1 0287 28BF 00EF  31F4 D0EB 7628 65FC 5E36
Please send encrypted e-mail if possible
http://sergiodj.net/



More information about the Gdb-patches mailing list