> +        folder = g_filename_to_uri (g_path_get_dirname (tmp), NULL,
 > &error);

g_path_get_dirname() would needs be freed.
The following might be an idea with your patch.

--- screenshot-dialog.c.orig    2009-03-11 17:41:15.947565000 +0900
+++ screenshot-dialog.c 2009-03-11 21:58:42.085745000 +0900
@@ -336,12 +336,11 @@
  char *
  screenshot_dialog_get_uri (ScreenshotDialog *dialog)
  {
-  gchar *folder;
+  gchar *folder = NULL;
    const gchar *file_name;
-  gchar *uri, *file, *tmp;
+  gchar *uri = NULL, *file = NULL, *tmp;
    GError *error;

-  folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER 
(dialog->save_widget));
    file_name = gtk_entry_get_text (GTK_ENTRY (dialog->filename_entry));

    error = NULL;
@@ -356,8 +355,33 @@
        tmp = g_strdup (_("Screenshot.png"));
      }

-  file = g_uri_escape_string (tmp, NULL, FALSE);
-  uri = g_build_filename (folder, file, NULL);
+  if (g_path_is_absolute(tmp))
+    {
+        error = NULL;
+        uri = g_filename_to_uri (tmp, NULL, &error);
+        if (error)
+          {
+                g_warning ("Unable to convert `%s' to valid UTF-8: %s\n"
+                           "Falling back to default file.",
+                           file_name,
+                           error->message);
+                g_error_free (error);
+                g_free (tmp);
+                tmp = g_strdup (_("Screenshot.png"));
+                file = g_uri_escape_string (tmp, NULL, FALSE);
+          }
+
+    }
+  else
+    {
+       file = g_uri_escape_string (tmp, NULL, FALSE);
+    }
+
+  if (uri == NULL)
+    {
+       folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER 
(dialog->save_widget));
+       uri = g_build_filename (folder, file, NULL);
+    }

    g_free (folder);
    g_free (tmp);


Rohini-san wrote (03/11/09 09:54 PM):
> Abhijit,
> 
> Thanks for pointing out. Changed.
> 
> --- gnome-utils-2.25.90.orig/gnome-screenshot/screenshot-dialog.c       
> 2009-03-06 11:04:59.021848933 +0530
> +++ gnome-utils-2.25.90/gnome-screenshot/screenshot-dialog.c    
> 2009-03-11 18:01:57.997458129 +0530
> @@ -338,10 +338,9 @@
> {
>   gchar *folder;
>   const gchar *file_name;
> -  gchar *uri, *file, *tmp;
> +  gchar *uri, *file, *tmp, *tmp1;
>   GError *error;
> 
> -  folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER 
> (dialog->save_widget));
>   file_name = gtk_entry_get_text (GTK_ENTRY (dialog->filename_entry));
> 
>   error = NULL;
> @@ -356,7 +355,34 @@
>       tmp = g_strdup (_("Screenshot.png"));
>     }
> 
> -  file = g_uri_escape_string (tmp, NULL, FALSE);
> +  if (g_path_is_absolute(tmp))
> +  {
> +        error = NULL;
> +        folder = g_filename_to_uri (g_path_get_dirname (tmp), NULL, 
> &error);
> +        if (error)
> +        {
> +                g_warning ("Unable to convert folder to valid UTF-8: %s\n"
> +                           "Falling back to default file.",
> +                           error->message);
> +                g_error_free (error);
> +                folder = gtk_file_chooser_get_current_folder_uri 
> (GTK_FILE_CHOOSER (dialog->save_widget));
> +                tmp1 = g_strdup (_("Screenshot.png"));
> +                file = g_uri_escape_string (tmp1, NULL, FALSE);
> +                g_free (tmp1);
> +       }
> +        else
> +       {
> +               tmp1 = g_path_get_basename (tmp);
> +                file = g_uri_escape_string (tmp1, NULL, FALSE);
> +                g_free (tmp1);
> +       }
> +  }
> +  else
> +  {
> +       folder = gtk_file_chooser_get_current_folder_uri 
> (GTK_FILE_CHOOSER (dialog->save_widget));
> +       file = g_uri_escape_string (tmp, NULL, FALSE);
> +  }
> +
>   uri = g_build_filename (folder, file, NULL);
> 
>   g_free (folder);
> 
> 
> 
> abhijit nath - Sun Microsystems - Bangalore India wrote:
>> Hi,
>> On 03/11/09 18:05, Rohini wrote:
>>> Apologies for the spam. The previous fix was incorrect. Resending.
>>>
>>> Fix:
>>> --- 
>>> gnome-utils-2.25.90.orig/gnome-screenshot/screenshot-dialog.c       
>>> 2009-03-06 11:04:59.021848933 +0530
>>> +++ gnome-utils-2.25.90/gnome-screenshot/screenshot-dialog.c    
>>> 2009-03-11 18:01:57.997458129 +0530
>>> @@ -338,10 +338,9 @@
>>> {
>>>   gchar *folder;
>>>   const gchar *file_name;
>>> -  gchar *uri, *file, *tmp;
>>> +  gchar *uri, *file, *tmp, *tmp1;
>>>   GError *error;
>>>
>>> -  folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER 
>>> (dialog->save_widget));
>>>   file_name = gtk_entry_get_text (GTK_ENTRY (dialog->filename_entry));
>>>
>>>   error = NULL;
>>> @@ -356,7 +355,34 @@
>>>       tmp = g_strdup (_("Screenshot.png"));
>>>     }
>>>
>>> -  file = g_uri_escape_string (tmp, NULL, FALSE);
>>> +  if (g_path_is_absolute(tmp))
>>> +  {
>>> +        error = NULL;
>>> +        folder = g_filename_to_uri (g_path_get_dirname (tmp), NULL, 
>>> &error);
>>> +        if (error)
>>> +        {
>>> +                g_warning ("Unable to convert folder to valid UTF-8: 
>>> %s\n"
>>> +                           "Falling back to default file.",
>>> +                           error->message);
>>> +                g_error_free (error);
>>> +                folder = gtk_file_chooser_get_current_folder_uri 
>>> (GTK_FILE_CHOOSER (dialog->save_widget));
>>> +                tmp1 = g_strdup (_("Screenshot.png"));
>>> +                file = g_uri_escape_string (tmp1, NULL, FALSE);
>>> +                g_free (tmp1);
>>> +       }
>>> +        else
>>> +       {
>>> +               tmp1 = g_path_get_basename (tmp);
>>> +                file = g_uri_escape_string (g_path_get_basename 
>>> (tmp), NULL, FALSE);
>> g_path_get_basename() API returns gchar*. So it should be freed.
>>
>>> +                g_free (tmp1);
>>> +       }
>>> +  }
>>> +  else
>>> +  {
>>> +       folder = gtk_file_chooser_get_current_folder_uri 
>>> (GTK_FILE_CHOOSER (dialog->save_widget));
>>> +       file = g_uri_escape_string (tmp, NULL, FALSE);
>>> +  }
>>> +
>>>   uri = g_build_filename (folder, file, NULL);
>>>
>>>   g_free (folder);
>>>
>>>
>>> abhijit nath - Sun Microsystems - Bangalore India wrote:
>>>> Rohini,
>>>>
>>>> On 03/11/09 14:46, Takao Fujiwara - Tokyo S/W Center wrote:
>>>>> Rohini-san wrote (03/11/09 03:24 PM):
>>>>>> CR: gnome screenshot refuses to allow different dir unless mouse 
>>>>>> is used
>>>>>>
>>>>>> Description:
>>>>>> Added a check to verify if filename is absolute and ignoring 
>>>>>> folder if absolute path is specified.
>>>>>>
>>>>>> Fix:
>>>>>> diff -urN 
>>>>>> gnome-utils-2.25.90.orig/gnome-screenshot/screenshot-dialog.c 
>>>>>> gnome-utils-2.25.90/gnome-screenshot/screenshot-dialog.c
>>>>>> --- 
>>>>>> gnome-utils-2.25.90.orig/gnome-screenshot/screenshot-dialog.c       
>>>>>> 2009-03-06 11:04:59.021848933 +0530
>>>>>> +++ gnome-utils-2.25.90/gnome-screenshot/screenshot-dialog.c    
>>>>>> 2009-03-06 11:57:56.734246867 +0530
>>>>>> @@ -356,6 +356,26 @@
>>>>>>       tmp = g_strdup (_("Screenshot.png"));
>>>>>>     }
>>>>>>
>>>>>> +  if (g_path_is_absolute(tmp))
>>>>>> +  {
>>>>>> +       error = NULL;
>>>>>> +       folder = g_filename_to_uri (g_path_get_dirname (tmp), 
>>>>>> NULL, &error);
>>>>>> +       if (error)
>>>>>> +       {
>>>>>> +               g_warning ("Unable to convert `%s' to valid UTF-8: 
>>>>>> %s\n"
>>>>>> +                          "Falling back to default file.",
>>>>>> +                          folder,
>>>>>> +                          error->message);
>>>>>> +               g_error_free (error);
>>>>>> +               folder = gtk_file_chooser_get_current_folder_uri 
>>>>>> (GTK_FILE_CHOOSER (dialog->save_widget));
>>>>>> +               tmp = g_strdup (_("Screenshot.png"));
>>>> I guess, in this line also it leaks memory as memory is allocated in 
>>>> line 356 for tmp and it is not getting freed.
>>>>>> +
>>>>>> +       }
>>>>>> +       else
>>>>>> +               tmp = g_path_get_basename (tmp);
>>>>>
>>>>> I think tmp and folder needs to be freed before you change the values.
>>>>>
>>>>>
>>>>>> +
>>>>>> +  }
>>>>>> +
>>>>>>   file = g_uri_escape_string (tmp, NULL, FALSE);
>>>>>>   uri = g_build_filename (folder, file, NULL);
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
> 
> 


  • [jds-review] F... Rohini
    • [jds-revi... krishnan parthasarathi - Sun Microsystems - Bangalore India
    • [jds-revi... Takao Fujiwara - Tokyo S/W Center
      • [jds-... abhijit nath - Sun Microsystems - Bangalore India
        • [... Rohini
        • [... Rohini
          • ... abhijit nath - Sun Microsystems - Bangalore India
            • ... Rohini
              • ... Takao Fujiwara - Tokyo S/W Center

Reply via email to