Wednesday, September 25, 2024

Review about this code ?


Hi !
Sorry for the inconvenience, I wanted to know if this
piece of code seemed to be correct for a OpenBSD developer ?

#define SAFE_FREE(addr)  do { \
  if (addr) \
    { \
      free (addr); \
      addr = NULL; \
    } \
  else \
    { \
      fprintf (stderr, " (double free inside %s:%s) at L%d\n", \
       __FILE__, __func__, __LINE__); \
    } \
  }  while(0);
 
char *
argv_into_line (char **args)
{
  if (args == NULL)
    return NULL;


  size_t offset = 0;
  char **s = args;
  char *line = NULL;

  for (; *s; ++s)
    {
      const size_t len = strlen (*s);
      // pour l'espace et le terminateur
      char *new_line = realloc (line, len + offset + 2);
      if (new_line == NULL)
      {
          if (line != NULL)
          {
                SAFE_FREE (line);
          }
          break;
      }
      line = new_line;
      memset (&line[offset], 0, len);
     
      strcat (strcat (&line[offset], *s), " ");
      offset += len + 1 ;
    }
  return line;
}

No comments:

Post a Comment