if (error == RX_CALL_DEAD ||
error == RX_CALL_TIMEOUT ||
- error == RX_MSGSIZE)
- error = CM_ERROR_RETRY;
+ error == RX_CALL_BUSY ||
+ error == RX_MSGSIZE ||
+ error == VNOSERVICE)
+ error = CM_ERROR_TIMEDOUT;
+ else if (error == RX_CALL_IDLE)
+ error = EIO;
+ else if (error == RX_INVALID_OPERATION)
+ error = CM_ERROR_INVAL_NET_RESP;
else if (error < 0)
error = CM_ERROR_UNKNOWN;
else if (error == EINVAL)
error = CM_ERROR_QUOTA;
else if (error == VNOVNODE)
error = CM_ERROR_BADFD;
- else if (error == VNOSERVICE || error == VSALVAGE || error == VOFFLINE)
+ else if (error == VSALVAGE || error == VOFFLINE)
error = CM_ERROR_ALLOFFLINE;
else if (error == VBUSY || error == VRESTARTING)
error = CM_ERROR_ALLBUSY;
if (error == RX_CALL_DEAD ||
error == RX_CALL_TIMEOUT ||
- error == RX_MSGSIZE)
- error = CM_ERROR_RETRY;
+ error == RX_CALL_BUSY ||
+ error == RX_CALL_IDLE ||
+ error == RX_MSGSIZE ||
+ error == VNOSERVICE)
+ error = CM_ERROR_TIMEDOUT;
else if (error == VNOVNODE)
error = CM_ERROR_BADFD;
- else if (error == VNOSERVICE || error == VSALVAGE || error == VOFFLINE)
+ else if (error == VSALVAGE || error == VOFFLINE)
error = CM_ERROR_ALLOFFLINE;
else if (error == VBUSY || error == VRESTARTING)
error = CM_ERROR_ALLBUSY;
+ else if (error == RX_INVALID_OPERATION)
+ error = CM_ERROR_INVAL_NET_RESP;
else if (error < 0)
error = CM_ERROR_UNKNOWN;
else if (error == EROFS)
else if (error == EINVAL)
error = CM_ERROR_INVAL;
else if (error == ENOTEMPTY
+ || error == EEXIST
|| error == 17 /* AIX */
|| error == 66 /* SunOS 4, Digital UNIX */
|| error == 93 /* Solaris 2, IRIX */
if (error == RX_CALL_DEAD ||
error == RX_CALL_TIMEOUT ||
- error == RX_MSGSIZE)
- error = CM_ERROR_RETRY;
+ error == RX_CALL_BUSY ||
+ error == RX_CALL_IDLE ||
+ error == RX_MSGSIZE ||
+ error == VNOSERVICE)
+ error = CM_ERROR_TIMEDOUT;
+ else if (error == RX_INVALID_OPERATION)
+ error = CM_ERROR_INVAL_NET_RESP;
else if (error == RX_RESTARTING)
error = CM_ERROR_ALLBUSY;
else if (error < 0)
*shortNameEndp = shortName;
}
+void cm_Gen8Dot3VolNameW(afs_uint32 cell, afs_uint32 volume,
+ clientchar_t *shortName, clientchar_t **shortNameEndp)
+{
+ clientchar_t number[12];
+ int i, nsize = 0;
+ int validExtension = 0;
+
+ /* Unparse the file's cell and volume numbers */
+ do {
+ number[nsize] = cm_8Dot3Mapping[cell % cm_8Dot3MapSize];
+ nsize++;
+ cell /= cm_8Dot3MapSize;
+ } while (cell);
+ do {
+ number[nsize] = cm_8Dot3Mapping[volume % cm_8Dot3MapSize];
+ nsize++;
+ volume /= cm_8Dot3MapSize;
+ } while (volume && nsize < 8);
+
+ /* Copy uniquifier characters */
+ for (i=0; i < nsize; i++) {
+ *shortName++ = number[i];
+ }
+
+ /* Add extension characters */
+ *shortName++ = '.'; /* copy dot */
+ *shortName++ = 'v';
+ *shortName++ = 'o';
+ *shortName++ = 'l';
+
+ /* Trailing null */
+ *shortName = 0;
+
+ if (shortNameEndp)
+ *shortNameEndp = shortName;
+}
+
/*! \brief Compare 'pattern' (containing metacharacters '*' and '?') with the file name 'name'.
\note This procedure works recursively calling itself.
void cm_LargeSearchTimeFromUnixTime(FILETIME *largeTimep, time_t unixTime)
{
// Note that LONGLONG is a 64-bit value
- LONGLONG ll;
-
- ll = Int32x32To64(unixTime, 10000000) + 116444736000000000;
- largeTimep->dwLowDateTime = (DWORD)(ll & 0xFFFFFFFF);
- largeTimep->dwHighDateTime = (DWORD)(ll >> 32);
+ LARGE_INTEGER ll;
+
+#ifdef _USE_32BIT_TIME_T
+ ll.QuadPart = UInt32x32To64(unixTime, 10000000) + 116444736000000000;
+#else
+ ll.QuadPart = unixTime * 10000000 + 116444736000000000;
+#endif
+ largeTimep->dwLowDateTime = ll.LowPart;
+ largeTimep->dwHighDateTime = ll.HighPart;
}
void cm_UnixTimeFromLargeSearchTime(time_t *unixTimep, FILETIME *largeTimep)
{
// Note that LONGLONG is a 64-bit value
- LONGLONG ll;
+ LARGE_INTEGER ll;
- ll = largeTimep->dwHighDateTime;
- ll <<= 32;
- ll += largeTimep->dwLowDateTime;
+ ll.HighPart = largeTimep->dwHighDateTime;
+ ll.LowPart = largeTimep->dwLowDateTime;
- ll -= 116444736000000000;
- ll /= 10000000;
+ ll.QuadPart -= 116444736000000000;
+ ll.QuadPart /= 10000000;
- *unixTimep = (DWORD)ll;
+ *unixTimep = (time_t)ll.QuadPart;
}
void cm_SearchTimeFromUnixTime(afs_uint32 *searchTimep, time_t unixTime)
*unixTimep = mktime(&localTm);
}
+
+afs_uint32
+cm_NextHighestPowerOf2(afs_uint32 n)
+{
+ n--;
+ n |= n >> 1;
+ n |= n >> 2;
+ n |= n >> 4;
+ n |= n >> 8;
+ n |= n >> 16;
+ n++;
+ return n;
+}