コード例 #1
0
ファイル: pocl_file_util.c プロジェクト: franz/pocl
int
pocl_mk_tempname (char *output, const char *prefix, const char *suffix,
                  int *ret_fd)
{
#if defined(_MSC_VER) || defined(__MINGW32__)
#error "making temporary files on Windows not implemented"
#elif defined(HAVE_MKOSTEMPS) || defined(HAVE_MKSTEMPS) || defined(__ANDROID__)
  /* using mkstemp() instead of tmpnam() has no real benefit
   * here, as we have to pass the filename to llvm,
   * but tmpnam() generates an annoying warning... */
  int fd;

  strncpy (output, prefix, POCL_FILENAME_LENGTH);
  size_t len = strlen (prefix);
  strncpy (output + len, "_XXXXXX", (POCL_FILENAME_LENGTH - len));

#ifdef __ANDROID__
  fd = pocl_mkstemp (output);
#else
  if (suffix)
    {
      len += 7;
      strncpy (output + len, suffix, (POCL_FILENAME_LENGTH - len));
#ifdef HAVE_MKOSTEMPS
      fd = mkostemps (output, strlen (suffix), O_CLOEXEC);
#else
      fd = mkstemps (output, strlen (suffix));
#endif
    }
  else
#ifdef HAVE_MKOSTEMPS
    fd = mkostemp (output, O_CLOEXEC);
#else
    fd = mkstemp (output);
#endif
#endif

  if (fd < 0)
    {
      POCL_MSG_ERR ("mkstemp() failed\n");
      return errno;
    }

  int err = 0;
  if (ret_fd)
    *ret_fd = fd;
  else
    {
      err = close (fd);
    }
  return err ? errno : 0;
#else
#error mkostemps() / mkstemps() both unavailable
#endif
}
コード例 #2
0
ファイル: main.c プロジェクト: jy2wong/spektro
static int generate_tmp_image_fd() {
  int tmp_fd;
  char tmp_image_fname[] = "/tmp/spektro_XXXXXX.pgm";

  tmp_fd = mkostemps(tmp_image_fname, 4, O_CREAT|O_WRONLY);
  if (image_fname != NULL) {
    free(image_fname);
  }
  image_fname = strdup(tmp_image_fname);
  return tmp_fd;
}
コード例 #3
0
/* Like mkostemps, but do not return STDIN_FILENO, STDOUT_FILENO, or
   STDERR_FILENO.  */
int
mkostemps_safer (char *templ, int suffixlen, int flags)
{
  return fd_safer_flag (mkostemps (templ, suffixlen, flags), flags);
}
コード例 #4
0
ファイル: tst-mkostemps.c プロジェクト: Jaden-J/uclibc-ng
int
main (int argc, char *argv[])
{
  char name[256];
  char name_suffix[256];
  FILE *fp = NULL;
  int retval = 0;
  int fd;
  int flags = O_RDONLY | O_CLOEXEC;
  struct stat sb_f1;
  struct stat sb_f2;

  /* mkstemp test */
  sprintf(name, "/tmp/%s-uClibc-test.XXXXXX", __FILE__);

  fd = mkstemp(name);

  fstat(fd, &sb_f1);
  assert ((sb_f1.st_mode & S_IFMT) == S_IFREG)

  stat(name, &sb_f2);
  assert ((sb_f2.st_mode & S_IFMT) == S_IFREG)

  assert (sb_f1.st_ino == sb_f2.st_ino)

  close(fd);
  unlink (name);

  /* mkstemps test */
  sprintf(name_suffix, "/tmp/%s-uClibc-test.XXXXXX.txt", __FILE__);

  fd = mkstemps(name_suffix, 4);

  fstat(fd, &sb_f1);
  assert ((sb_f1.st_mode & S_IFMT) == S_IFREG)

  stat(name_suffix, &sb_f2);
  assert ((sb_f2.st_mode & S_IFMT) == S_IFREG)

  assert (sb_f1.st_ino == sb_f2.st_ino)

  close(fd);
  unlink (name_suffix);

  /* mkostemp test */
  sprintf(name, "/tmp/%s-uClibc-test.XXXXXX", __FILE__);

  fd = mkostemp(name, flags);

  fstat(fd, &sb_f1);
  assert ((sb_f1.st_mode & S_IFMT) == S_IFREG)

  stat(name, &sb_f2);
  assert ((sb_f2.st_mode & S_IFMT) == S_IFREG)

  assert (sb_f1.st_ino == sb_f2.st_ino)
  assert (sb_f1.st_mode == sb_f2.st_mode)

  close(fd);
  unlink (name);

  /* mkostemps test */
  sprintf(name_suffix, "/tmp/%s-uClibc-test.XXXXXX.txt", __FILE__);

  fd = mkostemps(name_suffix, 4, flags);

  fstat(fd, &sb_f1);
  assert ((sb_f1.st_mode & S_IFMT) == S_IFREG)

  stat(name_suffix, &sb_f2);
  assert ((sb_f2.st_mode & S_IFMT) == S_IFREG)

  assert (sb_f1.st_ino == sb_f2.st_ino)
  assert (sb_f1.st_mode == sb_f2.st_mode)

  close(fd);
  unlink (name_suffix);

  /* suffixlen = 0 */
  sprintf(name_suffix, "/tmp/%s-uClibc-test.XXXXXX", __FILE__);

  fd = mkostemps(name_suffix, 0, flags);

  fstat(fd, &sb_f1);
  assert ((sb_f1.st_mode & S_IFMT) == S_IFREG)

  stat(name_suffix, &sb_f2);
  assert ((sb_f2.st_mode & S_IFMT) == S_IFREG)

  assert (sb_f1.st_ino == sb_f2.st_ino)
  assert (sb_f1.st_mode == sb_f2.st_mode)

  close(fd);
  unlink (name_suffix);

  /* stress tests */

  /* template len < 6 */
  sprintf(name, "XXXXX");

  fd = mkstemp(name);

  assert(fd == -1);
  assert(errno == EINVAL);

  /* suffixlen < 0 */
  sprintf(name_suffix, "/tmp/%s-uClibc-test.XXXXXX.txt", __FILE__);

  fd = mkostemps(name_suffix, -1, flags);

  assert(fd == -1);
  assert(errno == EINVAL);

  /* Missing one X */
  sprintf(name_suffix, "/tmp/%s-uClibc-test.XXXXX.txt", __FILE__);

  fd = mkostemps(name_suffix, 4, flags);

  assert(fd == -1);
  assert(errno == EINVAL);

  /* wrong suffixlen */
  sprintf(name_suffix, "/tmp/%s-uClibc-test.XXXXXX.txt", __FILE__);

  fd = mkostemps(name_suffix, 2, flags);

  assert(fd == -1);
  assert(errno == EINVAL);

the_end:
  if (fp != NULL)
    assert (fclose (fp) == 0);
  unlink (name);
  unlink (name_suffix);

  return retval;
}