2010/7/28 Dominique Pellé <[email protected]>:
> I send this patch again with slightly more elegant way of doing it
> saving 3 lines of code. Sorry for the noise.
>From your patch:
+/* Used in qsort */
+static int cmp_str(s1, s2)
+ const void *s1;
+ const void *s2;
+{
+ return STRCMP(*(char_u **)s1, *(char_u **)s2);
+}
+
...
+ /* Sort and remove dupes which can happen when specifying multiple
+ * directories in dirnames such as "{syntax,ftplugin,indent}"
+ */
+ qsort(*file, *num_file, sizeof(char_u *), cmp_str);
+ for (i = *num_file - 1; i > 0; i--)
+ {
+ if (STRCMP((*file)[i - 1], (*file)[i]) == 0)
+ {
+ /* Remove dupe (*file)[i] */
+ vim_free((*file)[i]);
+ if (*num_file - i - 1 > 0)
+ mch_memmove(&(*file)[i], &(*file)[i + 1],
+ (*num_file - i - 1)*sizeof(char *));
+ --*num_file;
+ }
+ }
The code to achieve this (sort and remove duplicates) are already implemented
and you can reuse it in place of the codes above.
The functions misc2.c:sort_strings() and misc1.c:remove_duplicates()
can be used as-is.
You'll have to export misc1.c:remove_duplicates() though.
See the sample usage in misc1.c:9455.
nazri.
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php