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; }
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; }