Пример #1
0
fileType *getFileType (char *file) {

   static FileInfoRecGS record;
   static fileType result;
   int i;

   /* set the parameters */
   record.pCount = 4;
   if ((record.pathname = __C2GSMALLOC(file)) == NULL) {
      errno = ENOMEM;
      return NULL;
   }

   /* get the info */
   GetFileInfoGS(&record);

   /* check for errors */
   i = toolerror();
   free(record.pathname);
   if (i) {
      errno = _mapErr(i);
      return NULL;
   }

   /* set the return value */
   result.type = record.fileType;
   result.auxtype = record.auxType;

   return &result;
}
Пример #2
0
char *
getcwd(char *pathname, size_t size) {
    PrefixRecGS *prefx;
    ResultBufPtr where;
    int e, allocated, i;
    char *result;

    if (size == 0 && pathname != NULL) {
    	errno = EINVAL;
    	return NULL;
    }
    if ((prefx = malloc (sizeof(PrefixRecGS))) == NULL) {
	return NULL;
    }
    if (pathname == NULL) {
    	size = MAXPATHLEN;
    	if ((pathname = malloc(size)) == NULL) {
	    e = errno;
    	    free(prefx);
    	    errno = e;
    	    return NULL;
    	}
    	allocated = 1;
    } else {
    	allocated = 0;
    }
    result = pathname;
    if ((where = GOinit (size, NULL)) == NULL) {
    	e = errno;
	free(prefx);
	if (allocated) free(pathname);
	errno = e;
	return NULL;
    }
	
    prefx->pCount = 2;
    prefx->buffer.getPrefix = (ResultBuf255Ptr) where;
    for (i=0; i<2; i++) {
	switch (i) {
	case 0:
	    prefx->prefixNum = 0;
	    break;
	case 1:
	    prefx->prefixNum = 8;
	    break;
	}
	GetPrefixGS(prefx);
	if (i == 0 && _toolErr == 0 && where->bufString.length == 0) {
	    /* prefix 0 not set */
	    continue;
	} else if ((e = _toolErr) != 0) {
	    e = (e == buffTooSmall) ? ERANGE : _mapErr(e);
 	    result = NULL;
 	    break;
	} else {
	    e = errno;
	    strncpy(pathname, where->bufString.text, where->bufString.length);
	    pathname[where->bufString.length] = 0;
    	    if (pathname[where->bufString.length-1] == ':') {
		pathname[where->bufString.length-1] = '\0';
	    }

	    /* convert the filename? */
	    if (_mapPath(pathname) == NULL) {
		e = EINVAL;
		result = NULL;
	    }
	    break;
        }    	
	/* NOTREACHED */
    }
    free(prefx);
    GOfree(where);
    if (allocated && result == NULL) {
    	free(pathname);
    }
    errno = e;
    return result;
}