コード例 #1
0
File my_open(const char *FileName, int Flags, myf MyFlags)
				/* Path-name of file */
				/* Read | write .. */
				/* Special flags */
{
  File fd;
  DBUG_ENTER("my_open");
  DBUG_PRINT("my",("Name: '%s'  Flags: %d  MyFlags: %d",
		   FileName, Flags, MyFlags));
#if defined(_WIN32)
  fd= my_win_open(FileName, Flags);
#else
  fd = open(FileName, Flags, my_umask);	/* Normal unix */
#endif

  fd= my_register_filename(fd, FileName, FILE_BY_OPEN, EE_FILENOTFOUND, MyFlags);
  DBUG_RETURN(fd);
} /* my_open */
コード例 #2
0
File my_create(const char *FileName, int CreateFlags, int access_flags,
               myf MyFlags)
{
    int fd, rc;
    DBUG_ENTER("my_create");
    DBUG_PRINT("my",("Name: '%s' CreateFlags: %d  AccessFlags: %d  MyFlags: %d",
                     FileName, CreateFlags, access_flags, MyFlags));

#if !defined(NO_OPEN_3)
    fd= open((char *) FileName, access_flags | O_CREAT,
             CreateFlags ? CreateFlags : my_umask);
#elif defined(_WIN32)
    fd= my_win_open(FileName, access_flags | O_CREAT);
#else
    fd= open(FileName, access_flags);
#endif

    if ((MyFlags & MY_SYNC_DIR) && (fd >=0) &&
            my_sync_dir_by_file(FileName, MyFlags))
    {
        my_close(fd, MyFlags);
        fd= -1;
    }

    rc= my_register_filename(fd, FileName, FILE_BY_CREATE,
                             EE_CANTCREATEFILE, MyFlags);
    /*
      my_register_filename() may fail on some platforms even if the call to
      *open() above succeeds. In this case, don't leave the stale file because
      callers assume the file to not exist if my_create() fails, so they don't
      do any cleanups.
    */
    if (unlikely(fd >= 0 && rc < 0))
    {
        int tmp= my_errno;
        my_close(fd, MyFlags);
        my_delete(FileName, MyFlags);
        my_errno= tmp;
    }

    DBUG_RETURN(rc);
} /* my_create */