[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
branch master updated: Deprecated directories warning in XS/C
From: |
Patrice Dumas |
Subject: |
branch master updated: Deprecated directories warning in XS/C |
Date: |
Mon, 23 Dec 2024 18:11:40 -0500 |
This is an automated email from the git hooks/post-receive script.
pertusus pushed a commit to branch master
in repository texinfo.
The following commit(s) were added to refs/heads/master by this push:
new 749da3e00a Deprecated directories warning in XS/C
749da3e00a is described below
commit 749da3e00a96730060ae5c2bf8f211ad0265c32f
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Sun Dec 15 19:40:41 2024 +0100
Deprecated directories warning in XS/C
* tp/Texinfo/XS/main/utils.c (file_name_is_absolute)
(locate_include_file, locate_file_in_dirs): add file_name_is_absolute.
* tp/Texinfo/XS/main/converter_types.h (DEPRECATED_DIR_INFO)
(DEPRECATED_DIRS_LIST, CONVERTER_INITIALIZATION_INFO, CONVERTER),
tp/Texinfo/XS/main/utils.c (find_deprecated_dir_info)
(add_deprecated_dir_info, copy_deprecated_dirs)
(add_new_deprecated_dir_info, free_deprecated_dirs_list): add
deprecated directories structures and functions.
* tp/Texinfo/XS/convert/converter.c (apply_converter_info)
(destroy_converter_initialization_info, free_generic_converter),
tp/Texinfo/XS/convert/get_converter_perl_info.c
(get_deprecated_config_directories_sv, get_converter_info_from_sv):
pass deprecated directories information from Perl to converter.
* tp/Texinfo/XS/main/utils.c (locate_file_in_dirs),
tp/Texinfo/XS/convert/html_prepare_converter.c (load_htmlxref_files):
set deprecated directories used in locate_file_in_dirs. Warn if
deprecated directories are used in load_htmlxref_files.
---
ChangeLog | 25 ++++++
tp/Texinfo/XS/convert/converter.c | 7 ++
tp/Texinfo/XS/convert/get_converter_perl_info.c | 45 +++++++++-
tp/Texinfo/XS/convert/html_prepare_converter.c | 44 +++++++++-
tp/Texinfo/XS/main/converter_types.h | 15 ++++
tp/Texinfo/XS/main/utils.c | 108 ++++++++++++++++++++++--
tp/Texinfo/XS/main/utils.h | 13 ++-
7 files changed, 247 insertions(+), 10 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index dd5c400a2e..9c0149fabc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2024-12-15 Patrice Dumas <pertusus@free.fr>
+
+ Deprecated directories warning in XS/C
+
+ * tp/Texinfo/XS/main/utils.c (file_name_is_absolute)
+ (locate_include_file, locate_file_in_dirs): add file_name_is_absolute.
+
+ * tp/Texinfo/XS/main/converter_types.h (DEPRECATED_DIR_INFO)
+ (DEPRECATED_DIRS_LIST, CONVERTER_INITIALIZATION_INFO, CONVERTER),
+ tp/Texinfo/XS/main/utils.c (find_deprecated_dir_info)
+ (add_deprecated_dir_info, copy_deprecated_dirs)
+ (add_new_deprecated_dir_info, free_deprecated_dirs_list): add
+ deprecated directories structures and functions.
+
+ * tp/Texinfo/XS/convert/converter.c (apply_converter_info)
+ (destroy_converter_initialization_info, free_generic_converter),
+ tp/Texinfo/XS/convert/get_converter_perl_info.c
+ (get_deprecated_config_directories_sv, get_converter_info_from_sv):
+ pass deprecated directories information from Perl to converter.
+
+ * tp/Texinfo/XS/main/utils.c (locate_file_in_dirs),
+ tp/Texinfo/XS/convert/html_prepare_converter.c (load_htmlxref_files):
+ set deprecated directories used in locate_file_in_dirs. Warn if
+ deprecated directories are used in load_htmlxref_files.
+
2024-12-10 Patrice Dumas <pertusus@free.fr>
* tp/Texinfo/XS/convert/texinfo.c (txi_parser): check that
diff --git a/tp/Texinfo/XS/convert/converter.c
b/tp/Texinfo/XS/convert/converter.c
index 3a712b109c..b17133cfbf 100644
--- a/tp/Texinfo/XS/convert/converter.c
+++ b/tp/Texinfo/XS/convert/converter.c
@@ -353,6 +353,9 @@ apply_converter_info (CONVERTER *converter,
converter->translated_commands
= copy_translated_commands (init_info->translated_commands);
}
+
+ copy_deprecated_dirs (&converter->deprecated_config_directories,
+ &init_info->deprecated_config_directories);
}
/* apply format_defaults and user_conf initialization information.
@@ -411,6 +414,8 @@ destroy_converter_initialization_info
(CONVERTER_INITIALIZATION_INFO *init_info)
free_options_list (&init_info->conf);
+ free_deprecated_dirs_list (&init_info->deprecated_config_directories);
+
free_strings_list (&init_info->non_valid_customization);
free (init_info);
}
@@ -1785,6 +1790,8 @@ free_generic_converter (CONVERTER *self)
destroy_translated_commands (self->translated_commands);
}
+ free_deprecated_dirs_list (&self->deprecated_config_directories);
+
free (self->expanded_formats);
if (self->init_conf)
diff --git a/tp/Texinfo/XS/convert/get_converter_perl_info.c
b/tp/Texinfo/XS/convert/get_converter_perl_info.c
index 868ef7a13f..41faf3c790 100644
--- a/tp/Texinfo/XS/convert/get_converter_perl_info.c
+++ b/tp/Texinfo/XS/convert/get_converter_perl_info.c
@@ -209,6 +209,45 @@ set_translated_commands (SV *translated_commands_sv)
return translated_commands;
}
+static void
+get_deprecated_config_directories_sv (SV *deprecated_config_directories_sv,
+ DEPRECATED_DIRS_LIST *deprecated_dirs)
+{
+ dTHX;
+
+ if (deprecated_config_directories_sv)
+ {
+ HV *deprecated_config_directories_hv = 0;
+ I32 hv_number;
+ I32 i;
+
+ if (!SvOK (deprecated_config_directories_sv))
+ hv_number = 0;
+ else
+ {
+ deprecated_config_directories_hv
+ = (HV *)SvRV (deprecated_config_directories_sv);
+
+ hv_number = hv_iterinit (deprecated_config_directories_hv);
+ }
+
+ for (i = 0; i < hv_number; i++)
+ {
+ HE *next = hv_iternext (deprecated_config_directories_hv);
+ SV *obsolete_dir_sv = hv_iterkeysv (next);
+ const char *obsolete_dir = (char *) SvPVutf8_nolen (obsolete_dir_sv);
+ SV *value_sv = HeVAL(next);
+ if (SvOK (value_sv))
+ {
+ const char *reference_dir = (char *) SvPVutf8_nolen (value_sv);
+ add_new_deprecated_dir_info (deprecated_dirs, obsolete_dir,
+ reference_dir);
+ }
+ }
+ }
+}
+
+
/* CLASS_NAME is Perl converter class for warning message. If NULL, no
message.
CONVERTER may be NULL (when called from converter_defaults). */
CONVERTER_INITIALIZATION_INFO *
@@ -265,9 +304,11 @@ get_converter_info_from_sv (SV *conf_sv, const char
*class_name,
if (!strcmp (key, "translated_commands"))
initialization_info->translated_commands
= set_translated_commands (value_sv);
- /* FIXME get deprecated_config_directories if needed */
else if (!strcmp (key, "deprecated_config_directories"))
- {}
+ {
+ get_deprecated_config_directories_sv (value_sv,
+ &initialization_info->deprecated_config_directories);
+ }
else if (class_name)
{
fprintf (stderr,
diff --git a/tp/Texinfo/XS/convert/html_prepare_converter.c
b/tp/Texinfo/XS/convert/html_prepare_converter.c
index 3c1647af7a..e75e9d6a90 100644
--- a/tp/Texinfo/XS/convert/html_prepare_converter.c
+++ b/tp/Texinfo/XS/convert/html_prepare_converter.c
@@ -1144,6 +1144,7 @@ load_htmlxref_files (CONVERTER *self)
{
char *encoded_htmlxref_file_name;
char *path_encoding;
+ static DEPRECATED_DIRS_LIST deprecated_dirs_used;
/* cast to remove const */
encoded_htmlxref_file_name
@@ -1154,7 +1155,48 @@ load_htmlxref_files (CONVERTER *self)
free (path_encoding);
locate_file_in_dirs (encoded_htmlxref_file_name,
- &htmlxref_dirs, &htmlxref_files);
+ &htmlxref_dirs, &htmlxref_files,
+ &self->deprecated_config_directories,
+ &deprecated_dirs_used);
+
+ if (deprecated_dirs_used.number)
+ {
+ size_t i;
+ const char *encoding =
self->conf->COMMAND_LINE_ENCODING.o.string;
+ for (i = 0; i < deprecated_dirs_used.number; i++)
+ {
+ char *dir_name, *replacement_dir;
+ DEPRECATED_DIR_INFO *deprecated_dir_info
+ = &deprecated_dirs_used.list[i];
+ if (encoding)
+ {
+ int status;
+ dir_name
+ = decode_string (deprecated_dir_info->obsolete_dir,
+ encoding, &status, 0);
+ replacement_dir
+ = decode_string (deprecated_dir_info->reference_dir,
+ encoding, &status, 0);
+ free (deprecated_dir_info->obsolete_dir);
+ free (deprecated_dir_info->reference_dir);
+ }
+ else
+ {
+ dir_name = deprecated_dir_info->obsolete_dir;
+ replacement_dir
+ = deprecated_dir_info->reference_dir;
+ }
+
+ message_list_document_warn (&self->error_messages,
+ self->conf, 0,
+ "%s directory is deprecated. Use %s instead",
+ dir_name, replacement_dir);
+
+ free (dir_name);
+ free (replacement_dir);
+ }
+ deprecated_dirs_used.number = 0;
+ }
free (encoded_htmlxref_file_name);
}
free_strings_list (&htmlxref_dirs);
diff --git a/tp/Texinfo/XS/main/converter_types.h
b/tp/Texinfo/XS/main/converter_types.h
index 6aca42ed1b..54163de0b8 100644
--- a/tp/Texinfo/XS/main/converter_types.h
+++ b/tp/Texinfo/XS/main/converter_types.h
@@ -749,11 +749,23 @@ typedef struct PRE_CLASS_TYPE_INFO {
char *pre_class;
} PRE_CLASS_TYPE_INFO;
+typedef struct DEPRECATED_DIR_INFO {
+ char *reference_dir;
+ char *obsolete_dir;
+} DEPRECATED_DIR_INFO;
+
+typedef struct DEPRECATED_DIRS_LIST {
+ size_t space;
+ size_t number;
+ DEPRECATED_DIR_INFO *list;
+} DEPRECATED_DIRS_LIST;
+
/* information on converter configuration from a source of configuration
(either output format or user customization) */
typedef struct CONVERTER_INITIALIZATION_INFO {
TRANSLATED_COMMAND *translated_commands;
OPTIONS_LIST conf;
+ DEPRECATED_DIRS_LIST deprecated_config_directories;
/* gather strings that are not customization options */
STRING_LIST non_valid_customization;
} CONVERTER_INITIALIZATION_INFO;
@@ -799,6 +811,9 @@ typedef struct CONVERTER {
/* API to open, set encoding and register files */
OUTPUT_FILES_INFORMATION output_files_information;
+ /* associates deprecated directories and reference directories */
+ DEPRECATED_DIRS_LIST deprecated_config_directories;
+
/* HTML specific */
/* set for a converter */
int external_references_number; /* total number of external references
diff --git a/tp/Texinfo/XS/main/utils.c b/tp/Texinfo/XS/main/utils.c
index d9db59e7f4..3d21febd57 100644
--- a/tp/Texinfo/XS/main/utils.c
+++ b/tp/Texinfo/XS/main/utils.c
@@ -1024,6 +1024,95 @@ destroy_strings_list (STRING_LIST *strings)
free (strings);
}
+/* Note: the Perl code (in Common.pm, 'locate_include_file') handles
+ a volume in a path (like "A:") using the File::Spec module. */
+static int
+file_name_is_absolute (const char *filename)
+{
+ return !memcmp (filename, "/", 1);
+}
+
+static DEPRECATED_DIR_INFO *
+find_deprecated_dir_info (DEPRECATED_DIRS_LIST *deprecated_dirs,
+ const char *directory_name)
+{
+ size_t i;
+ for (i = 0; i < deprecated_dirs->number; i++)
+ {
+ DEPRECATED_DIR_INFO *result = &deprecated_dirs->list[i];
+ if (!strcmp (result->obsolete_dir, directory_name))
+ return result;
+ }
+ return 0;
+}
+
+void
+add_deprecated_dir_info (DEPRECATED_DIRS_LIST *deprecated_dirs,
+ const DEPRECATED_DIR_INFO *deprecated_dir_info)
+{
+ DEPRECATED_DIR_INFO *found_deprecated_dir_info
+ = find_deprecated_dir_info (deprecated_dirs,
+ deprecated_dir_info->obsolete_dir);
+
+ if (found_deprecated_dir_info)
+ {
+ free (found_deprecated_dir_info->reference_dir);
+ found_deprecated_dir_info->reference_dir
+ = strdup (deprecated_dir_info->reference_dir);
+ }
+ else
+ {
+ if (deprecated_dirs->number >= deprecated_dirs->space)
+ {
+ deprecated_dirs->list
+ = realloc (deprecated_dirs->list,
+ (deprecated_dirs->space += 5) * sizeof (DEPRECATED_DIR_INFO));
+ }
+ deprecated_dirs->list[deprecated_dirs->number].obsolete_dir
+ = strdup (deprecated_dir_info->obsolete_dir);
+ deprecated_dirs->list[deprecated_dirs->number].reference_dir
+ = strdup (deprecated_dir_info->reference_dir);
+ deprecated_dirs->number++;
+ }
+}
+
+void
+copy_deprecated_dirs (DEPRECATED_DIRS_LIST *deprecated_dirs_dst,
+ const DEPRECATED_DIRS_LIST *deprecated_dirs_src)
+{
+ size_t i;
+ for (i = 0; i < deprecated_dirs_src->number; i++)
+ {
+ add_deprecated_dir_info (deprecated_dirs_dst,
+ &deprecated_dirs_src->list[i]);
+ }
+}
+
+void
+add_new_deprecated_dir_info (DEPRECATED_DIRS_LIST *deprecated_dirs,
+ const char *obsolete_dir,
+ const char *reference_dir)
+{
+ static DEPRECATED_DIR_INFO deprecated_dir_info;
+ /* actually const, but cannot be const in the structure */
+ deprecated_dir_info.obsolete_dir = (char *) obsolete_dir;
+ deprecated_dir_info.reference_dir = (char *) reference_dir;
+ add_deprecated_dir_info (deprecated_dirs, &deprecated_dir_info);
+}
+
+void
+free_deprecated_dirs_list (DEPRECATED_DIRS_LIST *deprecated_dirs)
+{
+ size_t i;
+ for (i = 0; i < deprecated_dirs->number; i++)
+ {
+ DEPRECATED_DIR_INFO *deprecated_dir_info = &deprecated_dirs->list[i];
+ free (deprecated_dir_info->obsolete_dir);
+ free (deprecated_dir_info->reference_dir);
+ }
+ free (deprecated_dirs->list);
+}
+
/* Return value to be freed by caller. */
/* try to locate a file called FILENAME, looking for it in the list of include
directories. */
@@ -1036,9 +1125,7 @@ locate_include_file (const char *filename, const
STRING_LIST *include_dirs_list)
size_t i;
/* Checks if filename is absolute or relative to current directory. */
- /* Note: the Perl code (in Common.pm, 'locate_include_file') handles
- a volume in a path (like "A:") using the File::Spec module. */
- if (!memcmp (filename, "/", 1)
+ if (file_name_is_absolute (filename)
|| (strlen (filename) >= 3 && !memcmp (filename, "../", 3))
|| (strlen (filename) >= 2 && !memcmp (filename, "./", 2)))
{
@@ -1084,9 +1171,11 @@ locate_include_file (const char *filename, const
STRING_LIST *include_dirs_list)
char *
locate_file_in_dirs (const char *filename,
const STRING_LIST *directories,
- STRING_LIST *all_files)
+ STRING_LIST *all_files,
+ DEPRECATED_DIRS_LIST *deprecated_dirs,
+ DEPRECATED_DIRS_LIST *deprecated_dirs_used)
{
- if (!memcmp (filename, "/", 1))
+ if (file_name_is_absolute (filename))
{
if (euidaccess (filename, R_OK) == 0)
{
@@ -1106,6 +1195,15 @@ locate_file_in_dirs (const char *filename,
xasprintf (&fullpath, "%s/%s", directories->list[i], filename);
if (euidaccess (fullpath, R_OK) == 0)
{
+ if (deprecated_dirs && deprecated_dirs_used)
+ {
+ DEPRECATED_DIR_INFO *deprecated_dir_info
+ = find_deprecated_dir_info (deprecated_dirs,
+ directories->list[i]);
+ if (deprecated_dir_info)
+ add_deprecated_dir_info (deprecated_dirs_used,
+ deprecated_dir_info);
+ }
if (all_files)
add_string (fullpath, all_files);
else
diff --git a/tp/Texinfo/XS/main/utils.h b/tp/Texinfo/XS/main/utils.h
index 915d0af7b3..15a4b57eb0 100644
--- a/tp/Texinfo/XS/main/utils.h
+++ b/tp/Texinfo/XS/main/utils.h
@@ -166,8 +166,17 @@ void add_include_directory (const char *filename,
char *locate_include_file (const char *filename,
const STRING_LIST *include_dirs_list);
char *locate_file_in_dirs (const char *filename,
- const STRING_LIST *directories,
- STRING_LIST *all_files);
+ const STRING_LIST *directories,
+ STRING_LIST *all_files,
+ DEPRECATED_DIRS_LIST *deprecated_dirs,
+ DEPRECATED_DIRS_LIST *deprecated_dirs_used);
+
+void copy_deprecated_dirs (DEPRECATED_DIRS_LIST *deprecated_dirs_dst,
+ const DEPRECATED_DIRS_LIST *deprecated_dirs_src);
+void add_new_deprecated_dir_info (DEPRECATED_DIRS_LIST *deprecated_dirs,
+ const char *obsolete_dir,
+ const char *reference_dir);
+void free_deprecated_dirs_list (DEPRECATED_DIRS_LIST *deprecated_dirs);
ENCODING_CONVERSION *get_encoding_conversion (const char *encoding,
ENCODING_CONVERSION_LIST *encodings_list);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- branch master updated: Deprecated directories warning in XS/C,
Patrice Dumas <=