<p><b>@b4n</b> commented on this pull request.</p>

<p>small stuff I noticed first time I went over, if it can be useful.<br>
Not a complete review.</p><hr>

<p>In <a href="https://github.com/geany/geany/pull/1445#discussion_r137916529">src/utils.c</a>:</p>
<pre style='color:#555'>> +{
+       gchar *prefix, **ptr;
+
+       if (!NZV(strv))
+               return NULL;
+
+       if (num == 0)
+               num = g_strv_length(strv);
+
+       prefix = g_strdup(strv[0]);
+
+       for (gint i = 0; prefix[i]; i++)
+       {
+               for (gint j = 1; j < num; j++)
+               {
+                       gchar *s = strv[j];
</pre>
<p><code>const</code> would make sense, the string should not be modified</p>

<hr>

<p>In <a href="https://github.com/geany/geany/pull/1445#discussion_r137916666">src/utils.c</a>:</p>
<pre style='color:#555'>> +
+       if (num == 0)
+               num = g_strv_length(strv);
+
+       /* sub is the working area where substrings from first are copied to */
+       sub = g_malloc(len+1);
+       lcs = g_strdup("");
+       foreach_str(_sub, first)
+       {
+               gsize chars_left = len - (_sub - first);
+               /* No point in continuing if the remainder is too short */
+               if (max > chars_left)
+                       break;
+               for (n_chars = 1; n_chars <= chars_left; n_chars++)
+               {
+                       /* strlcpy() ftw! */
</pre>
<p><a href="https://developer.gnome.org/glib/stable/glib-String-Utility-Functions.html#g-strlcpy" rel="nofollow"><code>g_strlcpy()</code></a> is there for you if you like.</p>

<hr>

<p>In <a href="https://github.com/geany/geany/pull/1445#discussion_r137917401">src/utils.c</a>:</p>
<pre style='color:#555'>> +            if (prefix[i] == '\0')
+                       break;
+       }
+       return prefix;
+}
+
+/* * Returns the longest common substring in a list of strings.
+ *
+ * The size of the list may be given explicitely, but defaults to @c g_strv_length(strv).
+ *
+ * @param strv The list of strings to process.
+ * @param num The number of strings contained in @a strv. Can be 0 if it's terminated by @c NULL.
+ *
+ * @return The common prefix that is part of all strings.
+ */
+gchar *utils_strv_find_lcs(gchar **strv, size_t num)
</pre>
<p>this should be static</p>

<hr>

<p>In <a href="https://github.com/geany/geany/pull/1445#discussion_r137917414">src/utils.c</a>:</p>
<pre style='color:#555'>> +/** Transform file names in a list to be shorter.
+ *
+ * This function takes a list of file names (porbably with absolute paths), and
+ * transforms the paths such that they are short but still unique. This is intended
+ * for dialogs which present the file list to the user, where the base name may result
+ * in duplicates (showing the full path might be inappropriate).
+ *
+ * The algorthm strips the common prefix (e-g. the user's home directory) and
+ * replaces the longest common substring with an ellipsis ("...").
+ *
+ * @param file_names @array{length=num} The list of strings to process.
+ * @param num The number of strings contained in @a file_names. Can be 0 if it's terminated by @c NULL.
+ * @return @transfer{full} A newly-allocated array of transformed paths strings, terminated by
+            @c NULL. Use @c g_strfreev() to free it.
+ *
+ * @since 1.31 (API 232)
</pre>
<p>do we need it in the API right away?  I mean, why not, but if there's no real use (and although it seems nice, it is fairly specific still) I'd rather wait a little.</p>

<hr>

<p>In <a href="https://github.com/geany/geany/pull/1445#discussion_r139527280">src/utils.c</a>:</p>
<pre style='color:#555'>> +GEANY_API_SYMBOL
+gchar **utils_strv_shorten_file_list(gchar **file_names, size_t num)
+{
+       gint i, j;
+       gchar *prefix, *substring, *name, *sep, **s;
+       TMTag *tmtag;
+       gchar **names;
+       gsize len;
+
+       /* The return value shall have exactly the same size as the input. If the input is a
+        * GStrv (last element is NULL), the output will follow suit. */
+       if (!num)
+               num = g_strv_length(file_names);
+       /* Always include a terminating NULL, enables easy freeing with g_strfreev() */
+       names = g_new(gchar *, num + 1);
+       names[num] = 0;
</pre>
<p>should be <code>NULL</code></p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/geany/geany/pull/1445#pullrequestreview-61653071">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/ABDrJxZrB1vgsTL-9GjYUVwJi016ddRvks5tc0sXgaJpZM4MnYrc">mute the thread</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/ABDrJ2nwGHW3jJZA9L5pzUHfyWOU-zQ3ks5tc0sXgaJpZM4MnYrc.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
  <link itemprop="url" href="https://github.com/geany/geany/pull/1445#pullrequestreview-61653071"></link>
  <meta itemprop="name" content="View Pull Request"></meta>
</div>
<meta itemprop="description" content="View this Pull Request on GitHub"></meta>
</div>

<script type="application/json" data-scope="inboxmarkup">{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/geany/geany","title":"geany/geany","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/geany/geany"}},"updates":{"snippets":[{"icon":"PERSON","message":"@b4n commented on #1445"}],"action":{"name":"View Pull Request","url":"https://github.com/geany/geany/pull/1445#pullrequestreview-61653071"}}}</script>