PRInt32 _PR_MD_STAT(const char *fn, struct stat *info) { PRInt32 rv; rv = _stat(fn, (struct _stat *)info); if (-1 == rv) { /* * Check for MSVC runtime library _stat() bug. * (It's really a bug in FindFirstFile().) * If a pathname ends in a backslash or slash, * e.g., c:\temp\ or c:/temp/, _stat() will fail. * Note: a pathname ending in a slash (e.g., c:/temp/) * can be handled by _stat() on NT but not on Win95. * * We remove the backslash or slash at the end and * try again. */ size_t len = strlen(fn); if (len > 0 && len <= _MAX_PATH && IsPrevCharSlash(fn, fn + len)) { char newfn[_MAX_PATH + 1]; strcpy(newfn, fn); newfn[len - 1] = '\0'; rv = _stat(newfn, (struct _stat *)info); } } if (-1 == rv) { _PR_MD_MAP_STAT_ERROR(errno); } return rv; }
PR_IMPLEMENT(PRInt32) _amigaos_Stat(const char *name, struct stat *sb) { PRInt32 rv; rv = stat(name, sb); if (rv < 0) { _PR_MD_MAP_STAT_ERROR(_MD_ERRNO()); } return rv; }
PR_IMPLEMENT(PRInt32) _amigaos_Getfileinfo64(const char *fn, PRFileInfo64 *info) { PRInt32 rv; struct stat sb; rv = stat(fn, &sb); if (rv < 0) { _PR_MD_MAP_STAT_ERROR(_MD_ERRNO()); } else if (NULL != info) { rv = _amigaos_convert_stat_to_fileinfo64(&sb, info); } return rv; }
PRInt32 _PR_MD_STAT(const char *fn, struct stat *info) { PRInt32 rv; char filename[CCHMAXPATH]; PR_snprintf(filename, CCHMAXPATH, "%s", fn); FlipSlashes(filename, strlen(filename)); rv = _stat((char*)filename, info); if (-1 == rv) { /* * Check for MSVC runtime library _stat() bug. * (It's really a bug in FindFirstFile().) * If a pathname ends in a backslash or slash, * e.g., c:\temp\ or c:/temp/, _stat() will fail. * Note: a pathname ending in a slash (e.g., c:/temp/) * can be handled by _stat() on NT but not on Win95. * * We remove the backslash or slash at the end and * try again. * * Not sure if this happens on OS/2 or not, * but it doesn't hurt to be careful. */ int len = strlen(fn); if (len > 0 && len <= _MAX_PATH && (fn[len - 1] == '\\' || fn[len - 1] == '/')) { char newfn[_MAX_PATH + 1]; strcpy(newfn, fn); newfn[len - 1] = '\0'; rv = _stat(newfn, info); } } if (-1 == rv) { _PR_MD_MAP_STAT_ERROR(errno); } return rv; }