示例#1
0
文件: path.c 项目: ErisBlastar/osfree
char * os2_fname_to_vfs_fname(const char *filename) 
{
  char * newfilename;
  char * newdirectory;
  struct dirent *diren;

  char drv = get_drv(filename);

  if(drv == '\0') 
  {
    return NULL; 
  }

  char * directory = get_directory(filename);
  if (directory==NULL)
  {
    return NULL;
  }
  char * name = get_name(filename);

  DosNameConversion(directory);
  DosNameConversion(name);

  struct I_Fs_srv *target_fs_srv = FSRouter_route(&fsrouter, drv);

  newfilename=malloc(strlen(target_fs_srv->mountpoint)+
                     strlen(directory)+
                     strlen(name)+1);
  newdirectory=malloc(strlen(target_fs_srv->mountpoint)+
                     strlen(directory)+1);
  strcpy(newdirectory, target_fs_srv->mountpoint);
  newdirectory=strcat(newdirectory, directory);
  strcpy(newfilename, newdirectory);
  newfilename=strcat(newfilename, name);

  return newfilename;
}
示例#2
0
APIRET APIENTRY DosOpenQueue(PPID ppid, PHQUEUE phq, PCSZ pszName)
{
    SAVEENV;
    PSZ pszNewName;
    key_t mykey = 0;
    PMQ pmq;

    /* allocate memory for the queue struct */
    pmq = malloc(sizeof(MQ));
    if (pmq == NULL) {
        RESTOREENV_RETURN(ERROR_QUE_NO_MEMORY);
    }
    pmq->hev = NULLHANDLE;

    /* named or unnamed queue? */
    if (pszName == NULL) {
        free(pmq);
        RESTOREENV_RETURN(ERROR_QUE_PROC_NO_ACCESS);
    }

    /* this is a named queue */
    pszNewName = alloca(strlen(pszName) + 1);
    if (pszNewName == NULL) {
        free(pmq);
        RESTOREENV_RETURN(ERROR_QUE_NO_MEMORY);
    }
    strcpy(pszNewName, pszName);
    DosNameConversion(pszNewName, "\\", ".", TRUE);
    if (*pszNewName == '.') {
        *pszNewName = '/';
    }

    /* get a key for the queue */
    mykey = DosFtok(pszNewName);
    if (mykey == -1) {
        free(pmq);
        RESTOREENV_RETURN(ERROR_INVALID_PARAMETER);
    }

    /* get the queue */
    pmq->qid = msgget(mykey, S_IRWXU | S_IRWXG);
    if (pmq->qid == -1) {
        switch (errno) {
        case ENOMEM:
        case ENOSPC:
            free(pmq);
            RESTOREENV_RETURN(ERROR_QUE_NO_MEMORY);
        case ENOENT:
            free(pmq);
            RESTOREENV_RETURN(ERROR_QUE_NAME_NOT_EXIST);
        default:
            free(pmq);
            RESTOREENV_RETURN(ERROR_QUE_PROC_NO_ACCESS);
        }
    }

    pmq->hev = NULLHANDLE;
    pmq->creator = FALSE;
    pmq->queueName[0] = '\0';
    *phq = (HQUEUE)pmq;
    *ppid = 0;
    RESTOREENV_RETURN(NO_ERROR);
}
示例#3
0
文件: io.c 项目: ErisBlastar/osfree
int io_load_file(const char * filename, void ** addr, unsigned long * size)
{
  char ch;
  FILE *f=0;
  char * newfilename;
  char * newdirectory;
  struct dirent *diren;
  char buf[256];
  int  len, i;

  LOG("filename=%s", filename);
  char drv = get_drv(filename);

  LOG("drv=%c:", drv);

  if(drv == '\0') 
  {
    return 2; /* ERROR_FILE_NOT_FOUND */
  }

  char * directory = get_directory(filename);
  LOG("directory=%s", directory);
  if (directory==NULL)
  {
    return 2; /* ERROR_FILE_NOT_FOUND */
  }
  char * name = get_name(filename);
  LOG("name=%s", name);

  DosNameConversion(directory);
  DosNameConversion(name);

  LOG("directory=%s", directory);
  LOG("name=%s", name);
#if 0
  LOG("srv_num_=%d", fsrouter.srv_num_);
  for(i=0; i< fsrouter.srv_num_; i++)
  {
    I_Fs_srv_t *srv = fsrouter.fs_srv_arr_[i];
    if (srv)
    {
      LOG("srv->drive=%s, srv->mountpoint=%s", srv->drive, srv->mountpoint);
    }
  }    
#endif
  struct I_Fs_srv *target_fs_srv = FSRouter_route(&fsrouter, drv);

  LOG("-1");
  newfilename=malloc(strlen(target_fs_srv->mountpoint)+
                     strlen(directory)+
                     strlen(name)+1);
  LOG("0");
  newdirectory=malloc(strlen(target_fs_srv->mountpoint)+
                     strlen(directory)+1);
  LOG("1");
  strcpy(newdirectory, target_fs_srv->mountpoint);
  newdirectory=strcat(newdirectory, directory);
  strcpy(newfilename, newdirectory);
  newfilename=strcat(newfilename, name);
  LOG("2");

//  LOG("%s => %s", filename, newfilename);

  //if (newdirectory[strlen(newdirectory) - 1] == '/')
  //  newdirectory[strlen(newdirectory) - 1] = '\0';

  //LOG("%s", newdirectory); // If I remove this then next line return NULL. Why?
  //enter_kdebug("stop"); // break into debugger
  DIR *dir = opendir(newdirectory);
  LOG("3");

  if (dir==NULL)
  {
    LOG("Error opening directory");
    return 2; /* ERROR_FILE_NOT_FOUND */
  }
  else
    LOG("opendir() successful");


  LOG("name=%s", name);
  while(diren = readdir(dir)) 
  {
        len = strlen(name);
        strncpy(buf, diren->d_name, len);
	buf[len] = '\0';
        LOG("diren->d_name=%s", diren->d_name);
	LOG("buf=%s", buf);
        if(!diren)
            break;
        if(strcasecmp(buf, name)==0) {
            break;
        }
  }
  
  if (!diren)
  {
    LOG("diren=0");
    closedir(dir);
    return 2;
  }
 
  //LOG("directory read");
  //LOG("newdirectory=%s", newdirectory);
  //LOG("diren->d_name=%s", diren->d_name);
  strcpy(newfilename, newdirectory);
  newfilename=strcat(newfilename, buf);

  closedir(dir);

  //LOG("newfilename=%s", newfilename);
  f = fopen(newfilename, "rb");
  LOG("file opened");
  if(f) {
     fseek(f, 0, SEEK_END);
     *size = ftell(f);  /* Extract the size of the file and reads it into a buffer.*/
     rewind(f);
     *addr = (void *)malloc(*size+1);
     fread(*addr, *size, 1, f);
     fclose(f);
     LOG("successful return");
     return 0; /*NO_ERROR;*/
  }

  return 2; /* ERROR_FILE_NOT_FOUND; */
}
示例#4
0
int
pathconv(char **converted, char *fname)
{
  struct I_Fs_srv *fsrv;
  char drv;
  char *directory;
  char *name;
  char *newfilename;
  char *newdirectory;

  drv = tolower(get_drv(fname));
  LOG("drv=%c:", drv);

  if(drv == '\0') 
  {
    return 1;
  }

  directory = get_directory(fname);
  LOG("directory=%s", directory);
  
  if (directory==NULL)
  {
    return 1;
  }
  
  name = get_name(fname);
  LOG("name=%s", name);

  DosNameConversion(directory);
  DosNameConversion(name);

  LOG("directory=%s", directory);
  LOG("name=%s", name);
  
  if (drv >= 'c' && drv <= 'z')
  { 
    fsrv = FSRouter_route(&fsrouter, drv);

    newdirectory=malloc(strlen(fsrv->mountpoint)+
                          strlen(directory)+1);

    strcpy(newdirectory, fsrv->mountpoint);
    newdirectory=strcat(newdirectory, directory);
  }
  else
  {
    newdirectory = malloc(strlen(directory) + 1);
    strcpy(newdirectory, directory);
  }

  newfilename=malloc(strlen(newdirectory)+
                     strlen(name)+1);

  strcpy(newfilename, newdirectory);
  newfilename=strcat(newfilename, name);

  LOG("newfilename=%s", newfilename);
  *converted = newfilename;

  return 0;
}