Пример #1
0
STATIC_ROUTINE int CopyFile(char *src, char *dst, int dont_replace)
{
  /*
  int status=0;
  char *cmd = (char *)malloc(strlen(src)+strlen(dst) + 100);
  sprintf(cmd,"cp %s %s",src,dst);
  status = system(cmd);
  if (status != 0)
     printf("Error creating pulse with command: %s, status = %d\n",cmd,status);
  else {
    sprintf(cmd,"SetMdsplusFileProtection %s 2> /dev/null",dst);
    system(cmd);
  }
  free(cmd);
  return status == 0;
  */
  int status = TreeFAILURE;

  int src_fd = MDS_IO_OPEN(src,O_RDONLY | O_BINARY | O_RANDOM, 0);
  if (src_fd != -1)
  {
    off_t src_len = MDS_IO_LSEEK(src_fd, 0, SEEK_END);
    int dst_fd = MDS_IO_OPEN(dst,O_RDWR | O_CREAT | O_TRUNC, 0664);
    if (dst_fd != -1)
    {
      MDS_IO_LSEEK(src_fd, 0, SEEK_SET);
      MDS_IO_LOCK(src_fd,0,src_len,1);
      if (src_len > 0)
      {
        void *buff = malloc(src_len);
        size_t bytes_read = MDS_IO_READ(src_fd,buff,(size_t)src_len);
        if (bytes_read == src_len)
	{
          int bytes_written = MDS_IO_WRITE(dst_fd,buff,(size_t)src_len);
          if (bytes_written == src_len)
            status = TreeSUCCESS;
        }
        if (buff)
          free(buff);
      }
      else if (src_len == 0)
          status = TreeSUCCESS;
      MDS_IO_LOCK(src_fd,0,src_len,0);
      MDS_IO_CLOSE(dst_fd);
    }
    MDS_IO_CLOSE(src_fd);
  }
  return status;
}
Пример #2
0
STATIC_ROUTINE int _CopyFile(char *src, char *dst, int lock_it)
{
  int status = TreeFAILURE;

  int src_fd = MDS_IO_OPEN(src,O_RDONLY | O_BINARY | O_RANDOM, 0);
  if (src_fd != -1)
  {
    ssize_t src_len = MDS_IO_LSEEK(src_fd, 0, SEEK_END);
    int dst_fd = MDS_IO_OPEN(dst,O_RDWR | O_CREAT | O_TRUNC, 0664);
    if ((dst_fd != -1) && (src_len != -1))
    {
      MDS_IO_LSEEK(src_fd, 0, SEEK_SET);
      if (lock_it) MDS_IO_LOCK(src_fd,0,(int)src_len,MDS_IO_LOCK_RD,0);
      if (src_len > 0)
      {
        size_t chunk_size = (size_t)(MIN(MAX_CHUNK, src_len));
        void *buff = malloc(chunk_size);
        size_t bytes_to_go = (size_t)src_len;
        while(bytes_to_go > 0)
        {
          size_t io_size = MIN(bytes_to_go, chunk_size);
          ssize_t bytes_read = MDS_IO_READ(src_fd,buff,io_size);
          if (bytes_read == io_size)
	  {
            ssize_t bytes_written = MDS_IO_WRITE(dst_fd,buff,io_size);
            if (bytes_written != io_size)
              break;
          }
          bytes_to_go -= io_size;
        }
        if (buff)
          free(buff);
        if (bytes_to_go == 0)
          status = TreeSUCCESS;
      }
      else if (src_len == 0)
          status = TreeSUCCESS;
      if (lock_it) MDS_IO_LOCK(src_fd,0,(int)src_len,MDS_IO_LOCK_NONE,0);
      MDS_IO_CLOSE(dst_fd);
    }
    MDS_IO_CLOSE(src_fd);
  }
  return status;
}
Пример #3
0
int       TreeGetCurrentShotId(char *experiment)
{
  int shot = 0;
  int status = 0;
  char *path = 0;
  char *exp = strcpy(malloc(strlen(experiment)+6),experiment);
  int i;
  int slen;
  for (i=0;exp[i] != '\0';i++)
    exp[i] = _ToLower(exp[i]);
  strcat(exp,"_path");
  path = TranslateLogical(exp);
  exp[strlen(experiment)]='\0';
  if (path && ((slen = strlen(path)) > 2) && (path[slen-1] == ':') && (path[slen-2] == ':'))
  {
    path[slen-2] = 0;
    status = TreeGetCurrentShotIdRemote(exp, path, &shot);
  }
  else
  {
    int fd = OpenShotIdFile(exp,O_RDONLY);
    if (fd != -1)
    {
      status = MDS_IO_READ(fd,&shot,sizeof(shot)) == sizeof(shot);
      MDS_IO_CLOSE(fd);
#ifdef WORDS_BIGENDIAN
      if (status & 1)
      {
        int lshot = shot;
        int i;
        char *optr = (char *)&shot;
        char *iptr = (char *)&lshot;
        for (i=0;i<4;i++) optr[i] = iptr[3-i];
      }
#endif
    }
  }
  if (path)
    TranslateLogicalFree(path);
  free(exp);
  return (status & 1) ? shot : 0;
}
Пример #4
0
/*------------------------------------------------------------------------------

		Name: TreeOpenNciW

		Type:   C function

		Author:	Josh Stillerman
			MIT Plasma Fusion Center

		Date:   22-MAR-1988

		Purpose: Open a tree characteristics file for write access.

------------------------------------------------------------------------------

	Call sequence:
		       status = TreeOpenNciW(info_ptr)

------------------------------------------------------------------------------
   Copyright (c) 1988
   Property of Massachusetts Institute of Technology, Cambridge MA 02139.
   This program cannot be copied or distributed in any form for non-MIT
   use without specific written approval of MIT Plasma Fusion Center
   Management.
---------------------------------------------------------------------------

	Description:


+-----------------------------------------------------------------------------*/
int TreeOpenNciW(TREE_INFO *info, int tmpfile)
{
  int       status;

/****************************************************
  If there is no characterisitics file block allocated then
    Allocate one
*****************************************************/

  if (info->nci_file == 0)
  {
    status = ((info->nci_file = (struct nci_file *)malloc(sizeof(NCI_FILE))) != NULL) ? TreeNORMAL : TreeFAILURE;
    if (status & 1)
    {
      size_t len = strlen(info->filespec)-4;
      char *filename = strncpy(malloc(len+20),info->filespec,len);
      filename[len]='\0';
      strcat(filename,tmpfile ? "characteristics#" : "characteristics");
      memset(info->nci_file,0, sizeof(NCI_FILE));
      info->nci_file->get = MDS_IO_OPEN(filename,tmpfile ? O_RDWR | O_CREAT | O_TRUNC  : O_RDONLY,0664);
      status = (info->nci_file->get == -1) ? TreeFAILURE : TreeNORMAL;
      if (info->nci_file->get == -1)
        info->nci_file->get = 0;
      if (status & 1)
      {
        info->nci_file->put = MDS_IO_OPEN(filename,O_RDWR, 0);
        status = (info->nci_file->put == -1) ? TreeFAILURE : TreeNORMAL;
        if (info->nci_file->put == -1)
          info->nci_file->put = 0;
      }
      free(filename);
    }
  }
  else
  {
  /*******************************************
    Else the file was open for read access so
    close it and re-open it for write access.
  *******************************************/
    size_t len = strlen(info->filespec)-4;
    char *filename = strncpy(malloc(len+20),info->filespec,len);
    filename[len]='\0';
    strcat(filename,tmpfile ? "characteristics#" : "characteristics");
    if (info->nci_file->put)
      MDS_IO_CLOSE(info->nci_file->put);
    info->nci_file->put = MDS_IO_OPEN(filename,(tmpfile ? O_RDWR | O_CREAT | O_TRUNC : O_RDWR), 0664);
    status = (info->nci_file->put == -1) ? TreeFAILURE : TreeNORMAL;
    if (info->nci_file->put == -1)
      info->nci_file->put = 0;
    free(filename);
  }
  if (status & 1)
  {
    if (info->edit)
    {
    info->edit->first_in_mem = (int)MDS_IO_LSEEK(info->nci_file->put,0,SEEK_END)/42;
    }
  /**********************************************
   Set up the RABs for buffered reads and writes
   and CONNECT it.
   If there is a problem then close it, free the
   memory and return.
  **********************************************/
  }
  else
    {
      free(info->nci_file);
      info->nci_file = NULL;
    }
  if (status & 1)
    TreeCallHook(OpenNCIFileWrite, info,0);
  return status;
}