Ticket #2085 (closed task: fixed)

Opened 7 years ago

Last modified 6 years ago

Repalce GLib deprecated functions

Reported by: vit_r Owned by: andrew_b
Priority: major Milestone: 4.7.3
Component: mc-core Version: master
Keywords: Cc: zaytsev
Blocked By: Blocking:
Branch state: Votes for changeset: committed-master

Description (last modified by andrew_b) (diff)

g_string_sprintf() is deprecated
it is met currently (master) only in src/editor/edit.c
replacing it by g_strdup_printf()

Attachments

2085-edit.c-replacing-g_string_sprintf-by-g_strdup_printf.patch (3.1 KB) - added by vit_r 7 years ago.
edit.c-replacing-g_string_sprintf-by-g_strdup_printf
2085-ftpfs.c-repl-deprecated-g_strup-by-g_ascii_strup.patch (1.2 KB) - added by vit_r 7 years ago.
ftpfs.c-repl-deprecated-g_strup-by-g_ascii_strup.patch
2085-repl-deprecated-g_strncasecmp-by-g_ascii_strncasecmp.patch (1.2 KB) - added by vit_r 7 years ago.
repl-deprecated-g_strncasecmp-by-g_ascii_strncasecmp
2085-repl-deprecated-g_strcasecmp-by-g_ascii_strcasecmp.patch (3.0 KB) - added by vit_r 7 years ago.
2085-repl-deprecated-g_strcasecmp-by-g_ascii_strcasecmp
2085-lib-strutil-strutil8bit.c-getting-rid-of-g_strdown.patch (2.2 KB) - added by vit_r 7 years ago.
lib-strutil-strutil8bit.c-getting-rid-of-g_strdown
2085-repl-deprecated-g_tree_traverse-by-g_tree_foreach.patch (768 bytes) - added by vit_r 7 years ago.
repl-deprecated-g_tree_traverse-by-g_tree_foreach

Change History

Changed 7 years ago by vit_r

edit.c-replacing-g_string_sprintf-by-g_strdup_printf

comment:1 Changed 7 years ago by andrew_b

  • Type changed from defect to task
  • Component changed from mcedit to mc-core
  • Description modified (diff)
  • Summary changed from edit.c-replacing-g_string_sprintf-by-g_strdup_printf to Repalce GLib deprecated functions

comment:2 Changed 7 years ago by andrew_b

  • Owner set to andrew_b
  • Status changed from new to accepted
  • Description modified (diff)

Created 2085_deprecated_glib_functions branch. Parent branch is master.
Initial changeset:25255b187c821e530de5530ef8eb3b443d842d51

Changed 7 years ago by vit_r

ftpfs.c-repl-deprecated-g_strup-by-g_ascii_strup.patch

comment:3 Changed 7 years ago by vit_r

2085-ftpfs.c-repl-deprecated-g_strup-by-g_ascii_strup.patch
g_strup() is met only once in lib/vfs/mc-vfs/ftpfs.c

GLib says:

g_strup ()
gchar*              g_strup       (gchar *string);
Warning
    This function is totally broken ... 
    use g_ascii_strup() or g_utf8_strup() instead.
 
    Converts a string to upper case.
string :
   the string to convert. 
Returns :
   the string

Checking the current encoding would be better
for choosing between g_ascii_strup() or g_utf8_strup()

---

2085-repl-deprecated-g_strncasecmp-by-g_ascii_strncasecmp.patch
g_strncasecmp() is met twice

GLib says:

 g_ascii_strncasecmp ()

 gint      g_ascii_strncasecmp   (const gchar *s1,
                                  const gchar *s2,
                                  gsize n);

   Compare s1 and s2, ignoring the case of ASCII characters
   and any characters after the first n in each string.

   Unlike the BSD strcasecmp() function, this only recognizes
   standard ASCII letters and ignores the locale, 
   treating all non-ASCII characters as if they are not letters.

   The same warning as in g_ascii_strcasecmp() applies: 
   Use this function only on strings known to be in encodings 
   where bytes corresponding to ASCII letters 
   always represent themselves.

   s1 :      string to compare with s2.                                                           
   s2 :      string to compare with s1.                                                           
   n :       number of characters to compare.                                                     
   Returns : 0 if the strings match, 
             a negative value if s1 < s2, 
             or a positive value if s1 > s2.

Seems nothing more is needed with g_strncasecmp().

-

Changed 7 years ago by vit_r

repl-deprecated-g_strncasecmp-by-g_ascii_strncasecmp

Changed 7 years ago by vit_r

2085-repl-deprecated-g_strcasecmp-by-g_ascii_strcasecmp

comment:4 Changed 7 years ago by vit_r

2085-repl-deprecated-g_strcasecmp-by-g_ascii_strcasecmp.patch

In case for something else (_NOT_ for ascii):
GLib says:

 g_utf8_casefold ()

 gchar *     g_utf8_casefold     (const gchar *str,
                                 gssize len);
 Converts a string into a form that is independent of case. 
 The result will not correspond to any particular case, 
 but can be compared for equality or ordered with the 
 results of calling g_utf8_casefold() on other strings.
 Note that calling g_utf8_casefold() 
 followed by g_utf8_collate() is only an approximation
 to the correct linguistic case insensitive ordering, 
 though it is a fairly good one. 
 Getting this exactly right would require a more sophisticated 
 collation function that takes case sensitivity into account.
 GLib does not currently provide such a function.
  str :
   a UTF-8 encoded string 
  len :
   length of str, in bytes, or -1 if str is nul-terminated. 
  Returns :
   a newly allocated string, that is a case independent form of str.


Meanwhile
Seems nothing more is needed with g_strncasecmp() for the moment.

First step (a try) is ready for discussion or decisions
Is need for something like
if (str_detect_termencoding () == ascii) etc?


There are two more left ('g_tree_traverse' once is met)

    src/editor/syntax.c:132:    g_tree_traverse ()

This 'g_tree_traverse' is for experts

and 'g_strdown' four times met in strutil/strutil8bit.c
In last case many questions ... and testing ...


Changed 7 years ago by vit_r

repl-deprecated-g_tree_traverse-by-g_tree_foreach

comment:5 Changed 7 years ago by vit_r

This 2085-lib-strutil-strutil8bit.c-getting-rid-of-g_strdown.patch
has two main goals


  1. to get rid of 'g_strdown()'


  1. to concenrate problem in one place

in this case on next line
(from my invention - str_8bit_down (const char *str)):

             *rets = char_tolower (*rets);


function 'char_tolower()' is picked up from
str_8bit_tolower (const char *text, char out, size_t * remain) {...}

One of the strangest thing in lib/strutil/strutil8bit.c:
it calls 'char_tolower()', 'char_toupper()'
but where these functions resides?


--

and next

2085-repl-deprecated-g_tree_traverse-by-g_tree_foreach.patch


is about the last found deprecated symbol

--

comment:6 Changed 6 years ago by andrew_b

  • severity changed from no branch to on review
  • Milestone changed from 4.7 to 4.7.3

Created 2085_deprecated_glib_functions branch. Parent branch is master.
Initial chageset: bf3cb9953749ab2bab861d029539597069dc761d

comment:7 Changed 6 years ago by andrew_b

Rebased to current master.
Initial changeset:4c73c2ae8ee42de7bbcd1fcab6a21456faa4b205

comment:8 Changed 6 years ago by slavazanko

  • Votes for changeset set to slavazanko

comment:9 Changed 6 years ago by angel_il

  • Votes for changeset changed from slavazanko to slavazanko angel_il
  • severity changed from on review to approved

comment:10 Changed 6 years ago by andrew_b

  • Status changed from accepted to testing
  • Votes for changeset changed from slavazanko angel_il to committed-master
  • Resolution set to fixed
  • severity changed from approved to merged

Merged to master.
changeset:7d000ad5e5b08e3d58a109bb6d7f4496fdf9fdab

git log --pretty=oneline f5ae2bf..7d000ad

comment:11 Changed 6 years ago by andrew_b

  • Status changed from testing to closed
  • Keywords stable-candidate added

comment:12 Changed 6 years ago by andrew_b

#2249 fixes the incorrect return value of str_8bit_strdown() function.

comment:13 Changed 6 years ago by zaytsev

  • Cc zaytsev added

1) Why our own strdown?
2) Why our own strncmp / strcmp? g_ascii_strncasecmp() !

I don't get the point.

comment:14 Changed 6 years ago by andrew_b

g_ascii_strncasecmp() only works on ASCII and is not locale-sensitive. Our own strdown() gives us the correct result in 8-bit locales.

comment:15 Changed 6 years ago by andrew_b

  • Keywords stable-candidate removed
Note: See TracTickets for help on using tickets.