bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug #63219] Introduce a close function for loadable plugins.


From: Dmitry Goncharov
Subject: [bug #63219] Introduce a close function for loadable plugins.
Date: Sat, 15 Oct 2022 20:45:20 -0400 (EDT)

Follow-up Comment #2, bug #63219 (project make):

This is the example from the manual extended with a close function

++++


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>

#include <gnumake.h>

int plugin_is_GPL_compatible;

struct file {
  struct file *next;
  char *name;
};
static struct file *files = NULL;

static char *
gen_tmpfile (const char *nm, int argc, char **argv)
{
  int fd;

  /* Compute the size of the filename and allocate space for it.  */
  int len = strlen (argv[0]) + 6 + 1;
  char *buf = gmk_alloc (len);

  strcpy (buf, argv[0]);
  strcat (buf, "XXXXXX");

  fd = mkstemp(buf);
  if (fd >= 0)
    {
      struct file *new = (struct file *) malloc (sizeof *new);
      new->name = strdup (buf);
      new->next = files;
      files = new;
      /* Don't leak the file descriptor.  */
      close (fd);
      return buf;
    }

  /* Failure.  */
  fprintf (stderr, "mkstemp(%s) failed: %s\n", buf, strerror (errno));
  gmk_free (buf);
  return NULL;
}

int
mk_temp_gmk_setup (const gmk_floc *floc)
{
  printf ("mk_temp plugin loaded from %s:%lu\n", floc->filenm, floc->lineno);
  /* Register the function with make name "mk-temp".  */
  gmk_add_function ("mk-temp", gen_tmpfile, 1, 1, 1);
  return 1;
}

void
mk_temp_gmk_close ()
{
  while (files)
    {
      struct file *f = files;
      printf ("unlinking %s\n", f->name);
      unlink (f->name);
      free (f->name);
      files = f->next;
      free (f);
    }
  files = NULL;
  printf ("mk_temp plugin unloaded\n");
}
----

Now when you run make you’ll see something like:

++++
$ make
mk_temp plugin loaded from makefile:1
Temporary file tmpfile.O7vuwn
unlinking tmpfile.O7vuwn
mk_temp plugin unloaded
cc -shared -fPIC -o mk_temp.so mk_temp.c
mk_temp plugin loaded from makefile:1
Temporary file tmpfile.lpgecm
Temporary file tmpfile.sIdBvo
unlinking tmpfile.sIdBvo
unlinking tmpfile.lpgecm
mk_temp plugin unloaded
----


    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?63219>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]