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; }
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); }
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; */ }
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; }