summaryrefslogtreecommitdiff
path: root/src/arbits/output
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2024-02-20 02:33:37 +0000
committermidipix <writeonce@midipix.org>2024-02-20 02:36:07 +0000
commit551fc3268637eb694842ee5913e85ae3f8c3357e (patch)
tree7c88e96337945201cd572aa2e4b98366eb184923 /src/arbits/output
parentd42469095d909e70814099a22b40ae2f9831fe6b (diff)
downloadslibtool-551fc3268637eb694842ee5913e85ae3f8c3357e.tar.bz2
slibtool-551fc3268637eb694842ee5913e85ae3f8c3357e.tar.xz
code base: separate slbt_ar_create_mapfile() from slbt_au_output_mapfile().
Diffstat (limited to 'src/arbits/output')
-rw-r--r--src/arbits/output/slbt_ar_output_mapfile.c111
-rw-r--r--src/arbits/output/slbt_au_output_mapfile.c12
2 files changed, 12 insertions, 111 deletions
diff --git a/src/arbits/output/slbt_ar_output_mapfile.c b/src/arbits/output/slbt_ar_output_mapfile.c
deleted file mode 100644
index f8cc1b7..0000000
--- a/src/arbits/output/slbt_ar_output_mapfile.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************/
-/* slibtool: a skinny libtool implementation, written in C */
-/* Copyright (C) 2016--2024 SysDeer Technologies, LLC */
-/* Released under the Standard MIT License; see COPYING.SLIBTOOL. */
-/*******************************************************************/
-
-#include <time.h>
-#include <locale.h>
-#include <regex.h>
-#include <inttypes.h>
-#include <slibtool/slibtool.h>
-#include <slibtool/slibtool_output.h>
-#include "slibtool_driver_impl.h"
-#include "slibtool_dprintf_impl.h"
-#include "slibtool_errinfo_impl.h"
-#include "slibtool_ar_impl.h"
-
-static int slbt_au_output_mapfile_impl(
- const struct slbt_driver_ctx * dctx,
- struct slbt_archive_meta_impl * mctx,
- int fdout)
-{
- bool fsort;
- bool fcoff;
- const char * regex;
- const char ** symv;
- const char ** symstrv;
- regex_t regctx;
- regmatch_t pmatch[2] = {{0,0},{0,0}};
-
- fsort = !(dctx->cctx->fmtflags & SLBT_OUTPUT_ARCHIVE_NOSORT);
- fcoff = (mctx->ofmtattr == AR_OBJECT_ATTR_COFF);
-
- if (slbt_dprintf(fdout,"{\n" "\t" "global:\n") < 0)
- return SLBT_SYSTEM_ERROR(dctx,0);
-
- if (fsort && !mctx->mapstrv)
- if (slbt_update_mapstrv(dctx,mctx) < 0)
- return SLBT_NESTED_ERROR(dctx);
-
- if ((regex = dctx->cctx->regex))
- if (regcomp(&regctx,regex,REG_NEWLINE))
- return SLBT_CUSTOM_ERROR(
- dctx,
- SLBT_ERR_FLOW_ERROR);
-
- symstrv = fsort ? mctx->mapstrv : mctx->symstrv;
-
- for (symv=symstrv; *symv; symv++)
- if (!fcoff || strncmp(*symv,"__imp_",6))
- if (!regex || !regexec(&regctx,*symv,1,pmatch,0))
- if (slbt_dprintf(fdout,"\t\t%s;\n",*symv) < 0)
- return SLBT_SYSTEM_ERROR(dctx,0);
-
- if (regex)
- regfree(&regctx);
-
- if (slbt_dprintf(fdout,"\n\t" "local:\n" "\t\t*;\n" "};\n") < 0)
- return SLBT_SYSTEM_ERROR(dctx,0);
-
- return 0;
-}
-
-
-static int slbt_ar_create_mapfile_impl(
- const struct slbt_archive_meta * meta,
- const char * path,
- mode_t mode)
-{
- struct slbt_archive_meta_impl * mctx;
- const struct slbt_driver_ctx * dctx;
- struct slbt_fd_ctx fdctx;
- int fdout;
-
- mctx = slbt_archive_meta_ictx(meta);
- dctx = (slbt_archive_meta_ictx(meta))->dctx;
-
- if (slbt_lib_get_driver_fdctx(dctx,&fdctx) < 0)
- return SLBT_NESTED_ERROR(dctx);
-
- if (!meta->a_memberv)
- return 0;
-
- if (path) {
- if ((fdout = openat(
- fdctx.fdcwd,path,
- O_WRONLY|O_CREAT|O_TRUNC,
- mode)) < 0)
- return SLBT_SYSTEM_ERROR(dctx,0);
- } else {
- fdout = fdctx.fdout;
- }
-
- return slbt_au_output_mapfile_impl(
- dctx,mctx,fdout);
-}
-
-
-int slbt_au_output_mapfile(const struct slbt_archive_meta * meta)
-{
- return slbt_ar_create_mapfile_impl(meta,0,0);
-}
-
-
-int slbt_ar_create_mapfile(
- const struct slbt_archive_meta * meta,
- const char * path,
- mode_t mode)
-{
- return slbt_ar_create_mapfile_impl(meta,path,mode);
-}
diff --git a/src/arbits/output/slbt_au_output_mapfile.c b/src/arbits/output/slbt_au_output_mapfile.c
new file mode 100644
index 0000000..8a84cc2
--- /dev/null
+++ b/src/arbits/output/slbt_au_output_mapfile.c
@@ -0,0 +1,12 @@
+/*******************************************************************/
+/* slibtool: a skinny libtool implementation, written in C */
+/* Copyright (C) 2016--2024 SysDeer Technologies, LLC */
+/* Released under the Standard MIT License; see COPYING.SLIBTOOL. */
+/*******************************************************************/
+
+#include <slibtool/slibtool.h>
+
+int slbt_au_output_mapfile(const struct slbt_archive_meta * meta)
+{
+ return slbt_ar_create_mapfile(meta,0,0);
+}