packages feed

EtaMOO-0.2.0.0: src/cbits/crypt.c

# define _XOPEN_SOURCE
# include <unistd.h>
# include <string.h>

# include "crypt.h"

/*
 * Call the POSIX crypt() function
 *
 * The crypt() function is not reentrant, so this helper allows us to copy the
 * results out while the Haskell runtime has blocked all other threads.
 *
 * To simplify memory management, we perform allocation for the results on the
 * Haskell side. However, if the provided buffer is too small, we return an
 * indication of the required size.
 */
int crypt_helper(const char *key, const char *salt, char *encrypted, int len)
{
  char *result;
  int req;

  result = crypt(key, salt);
  if (result == 0)
    return -1;

  req = strlen(result) + 1;
  if (req > len)
    return req;

  strcpy(encrypted, result);

  return 0;
}