PRMJ_ToExtendedTime(PRInt32 time) { PRInt64 exttime; PRInt64 g1970GMTMicroSeconds; PRInt64 low; time_t diff; PRInt64 tmp; PRInt64 tmp1; diff = PRMJ_LocalGMTDifference(); LL_UI2L(tmp, PRMJ_USEC_PER_SEC); LL_I2L(tmp1,diff); LL_MUL(tmp,tmp,tmp1); LL_UI2L(g1970GMTMicroSeconds,G1970GMTMICROHI); LL_UI2L(low,G1970GMTMICROLOW); #ifndef HAVE_LONG_LONG LL_SHL(g1970GMTMicroSeconds,g1970GMTMicroSeconds,16); LL_SHL(g1970GMTMicroSeconds,g1970GMTMicroSeconds,16); #else LL_SHL(g1970GMTMicroSeconds,g1970GMTMicroSeconds,32); #endif LL_ADD(g1970GMTMicroSeconds,g1970GMTMicroSeconds,low); LL_I2L(exttime,time); LL_ADD(exttime,exttime,g1970GMTMicroSeconds); LL_SUB(exttime,exttime,tmp); return exttime; }
// Gets shell version as packed 64 bit int PRUint64 nsDragService::GetShellVersion() { PRUint64 lVersion = LL_INIT(0, 0); PRUint64 lMinor = lVersion; // shell32.dll should be loaded already, so we ae not actually loading the library here PRLibrary *libShell = PR_LoadLibrary("shell32.dll"); if (libShell == NULL) return lVersion; do { DLLGETVERSIONPROC versionProc = NULL; versionProc = (DLLGETVERSIONPROC)PR_FindFunctionSymbol(libShell, "DllGetVersion"); if (versionProc == NULL) break; DLLVERSIONINFO versionInfo; ::ZeroMemory(&versionInfo, sizeof(DLLVERSIONINFO)); versionInfo.cbSize = sizeof(DLLVERSIONINFO); if (FAILED(versionProc(&versionInfo))) break; // why is this? LL_UI2L(lVersion, versionInfo.dwMajorVersion); LL_SHL(lVersion, lVersion, 32); LL_UI2L(lMinor, versionInfo.dwMinorVersion); LL_OR2(lVersion, lMinor); } while (false); PR_UnloadLibrary(libShell); libShell = NULL; return lVersion; }
static PRUint64 RubyTo64BitInt(VALUE aRuby) { VALUE bitMask = max_PRUint32; VALUE lo = rb_funcall(aRuby, id_and, 1, bitMask); VALUE hi = rb_funcall(aRuby, id_rshift, 1, INT2FIX(32)); PRUint64 result, hi64, lo64; LL_UI2L(hi64, NUM2UINT(hi)); LL_UI2L(lo64, NUM2UINT(lo)); LL_SHL(result, hi64, 32); LL_ADD(result, result, lo64); return result; }
PR_IMPLEMENT(PRUint64) PR_htonll(PRUint64 n) { #ifdef IS_BIG_ENDIAN return n; #else PRUint64 tmp; PRUint32 hi, lo; LL_L2UI(lo, n); LL_SHR(tmp, n, 32); LL_L2UI(hi, tmp); hi = htonl(hi); lo = htonl(lo); LL_UI2L(n, lo); LL_SHL(n, n, 32); LL_UI2L(tmp, hi); LL_ADD(n, n, tmp); return n; #endif } /* htonll */
PRMJ_ToBaseTime(PRInt64 time) { PRInt64 g1970GMTMicroSeconds; PRInt64 g2037GMTMicroSeconds; PRInt64 low; PRInt32 result; LL_UI2L(g1970GMTMicroSeconds,G1970GMTMICROHI); LL_UI2L(low,G1970GMTMICROLOW); #ifndef HAVE_LONG_LONG LL_SHL(g1970GMTMicroSeconds,g1970GMTMicroSeconds,16); LL_SHL(g1970GMTMicroSeconds,g1970GMTMicroSeconds,16); #else LL_SHL(g1970GMTMicroSeconds,g1970GMTMicroSeconds,32); #endif LL_ADD(g1970GMTMicroSeconds,g1970GMTMicroSeconds,low); LL_UI2L(g2037GMTMicroSeconds,G2037GMTMICROHI); LL_UI2L(low,G2037GMTMICROLOW); #ifndef HAVE_LONG_LONG LL_SHL(g2037GMTMicroSeconds,g2037GMTMicroSeconds,16); LL_SHL(g2037GMTMicroSeconds,g2037GMTMicroSeconds,16); #else LL_SHL(g2037GMTMicroSeconds,g2037GMTMicroSeconds,32); #endif LL_ADD(g2037GMTMicroSeconds,g2037GMTMicroSeconds,low); if(LL_CMP(time, <, g1970GMTMicroSeconds) || LL_CMP(time, >, g2037GMTMicroSeconds)){ return -1; } LL_SUB(time,time,g1970GMTMicroSeconds); LL_L2I(result,time); return result; }
int main(int argc, char **argv) { PRFileDesc *fd; PRInt64 offset, position; PRInt32 nbytes; char buf[MESSAGE_SIZE]; #ifdef _WIN32 HANDLE hFile; LARGE_INTEGER li; #endif /* _WIN32 */ LL_I2L(offset, 1); LL_SHL(offset, offset, 32); #ifdef _WIN32 hFile = CreateFile(TEST_FILE_NAME, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { fprintf(stderr, "CreateFile failed\n"); exit(1); } li.QuadPart = offset; li.LowPart = SetFilePointer(hFile, li.LowPart, &li.HighPart, FILE_BEGIN); if (li.LowPart == 0xFFFFFFFF && GetLastError() != NO_ERROR) { fprintf(stderr, "SetFilePointer failed\n"); exit(1); } PR_ASSERT(li.QuadPart == offset); strcpy(buf, MESSAGE); if (WriteFile(hFile, buf, sizeof(buf), &nbytes, NULL) == 0) { fprintf(stderr, "WriteFile failed\n"); exit(1); } PR_ASSERT(nbytes == sizeof(buf)); if (CloseHandle(hFile) == 0) { fprintf(stderr, "CloseHandle failed\n"); exit(1); } #endif /* _WIN32 */ memset(buf, 0, sizeof(buf)); fd = PR_Open(TEST_FILE_NAME, PR_RDONLY, 0666); if (fd == NULL) { fprintf(stderr, "PR_Open failed\n"); exit(1); } position = PR_Seek64(fd, offset, PR_SEEK_SET); if (!LL_GE_ZERO(position)) { fprintf(stderr, "PR_Seek64 failed\n"); exit(1); } PR_ASSERT(LL_EQ(position, offset)); nbytes = PR_Read(fd, buf, sizeof(buf)); if (nbytes != sizeof(buf)) { fprintf(stderr, "PR_Read failed\n"); exit(1); } if (strcmp(buf, MESSAGE)) { fprintf(stderr, "corrupt data:$%s$\n", buf); exit(1); } if (PR_Close(fd) == PR_FAILURE) { fprintf(stderr, "PR_Close failed\n"); exit(1); } if (PR_Delete(TEST_FILE_NAME) == PR_FAILURE) { fprintf(stderr, "PR_Delete failed\n"); exit(1); } printf("PASS\n"); return 0; }