Changeset 18191 in vbox for trunk/src/VBox/HostDrivers/Support/SUPLib.cpp
- Timestamp:
- Mar 24, 2009 2:39:36 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 44907
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/Support/SUPLib.cpp
r18169 r18191 734 734 735 735 736 /** 737 * Worker for the SUPR3Logger* APIs. 738 * 739 * @returns VBox status code. 740 * @param enmWhich Which logger. 741 * @param fWhat What to do with the logger. 742 * @param pszFlags The flags settings. 743 * @param pszGroups The groups settings. 744 * @param pszDest The destionation specificier. 745 */ 746 static int supR3LoggerSettings(SUPLOGGER enmWhich, uint32_t fWhat, const char *pszFlags, const char *pszGroups, const char *pszDest) 747 { 748 size_t const cchFlags = pszFlags ? strlen(pszFlags) : 0; 749 size_t const cchGroups = pszGroups ? strlen(pszGroups) : 0; 750 size_t const cchDest = pszDest ? strlen(pszDest) : 0; 751 size_t const cbStrTab = cchFlags + !!cchFlags 752 + cchGroups + !!cchGroups 753 + cchDest + !!cchDest 754 + (!cchFlags && !cchGroups && !cchDest); 755 756 PSUPLOGGERSETTINGS pReq = (PSUPLOGGERSETTINGS)alloca(SUP_IOCTL_LOGGER_SETTINGS_SIZE(cbStrTab)); 757 pReq->Hdr.u32Cookie = g_u32Cookie; 758 pReq->Hdr.u32SessionCookie = g_u32SessionCookie; 759 pReq->Hdr.cbIn = SUP_IOCTL_LOGGER_SETTINGS_SIZE_IN(cbStrTab); 760 pReq->Hdr.cbOut = SUP_IOCTL_LOGGER_SETTINGS_SIZE_OUT; 761 pReq->Hdr.fFlags= SUPREQHDR_FLAGS_DEFAULT; 762 pReq->Hdr.rc = VERR_INTERNAL_ERROR; 763 switch (enmWhich) 764 { 765 case SUPLOGGER_DEBUG: pReq->u.In.fWhich = SUPLOGGERSETTINGS_WHICH_DEBUG; break; 766 case SUPLOGGER_RELEASE: pReq->u.In.fWhich = SUPLOGGERSETTINGS_WHICH_RELEASE; break; 767 default: 768 return VERR_INVALID_PARAMETER; 769 } 770 pReq->u.In.fWhat = fWhat; 771 772 uint32_t off = 0; 773 if (cchFlags) 774 { 775 pReq->u.In.offFlags = off; 776 memcpy(&pReq->u.In.szStrings[off], pszFlags, cchFlags + 1); 777 off += cchFlags + 1; 778 } 779 else 780 pReq->u.In.offFlags = cbStrTab - 1; 781 782 if (cchGroups) 783 { 784 pReq->u.In.offGroups = off; 785 memcpy(&pReq->u.In.szStrings[off], pszGroups, cchGroups + 1); 786 off += cchGroups + 1; 787 } 788 else 789 pReq->u.In.offGroups = cbStrTab - 1; 790 791 if (cchDest) 792 { 793 pReq->u.In.offDestination = off; 794 memcpy(&pReq->u.In.szStrings[off], pszDest, cchDest + 1); 795 off += cchDest + 1; 796 } 797 else 798 pReq->u.In.offDestination = cbStrTab - 1; 799 800 if (!off) 801 { 802 pReq->u.In.szStrings[0] = '\0'; 803 off++; 804 } 805 Assert(off == cbStrTab); 806 Assert(pReq->u.In.szStrings[cbStrTab - 1] == '\0'); 807 808 809 int rc = suplibOsIOCtl(&g_supLibData, SUP_IOCTL_LOGGER_SETTINGS(cbStrTab), pReq, SUP_IOCTL_LOGGER_SETTINGS_SIZE(cbStrTab)); 810 if (RT_SUCCESS(rc)) 811 rc = pReq->Hdr.rc; 812 return rc; 813 } 814 815 816 SUPR3DECL(int) SUPR3LoggerSettings(SUPLOGGER enmWhich, const char *pszFlags, const char *pszGroups, const char *pszDest) 817 { 818 return supR3LoggerSettings(enmWhich, SUPLOGGERSETTINGS_WHAT_SETTINGS, pszFlags, pszGroups, pszDest); 819 } 820 821 822 SUPR3DECL(int) SUPR3LoggerCreate(SUPLOGGER enmWhich, const char *pszFlags, const char *pszGroups, const char *pszDest) 823 { 824 return supR3LoggerSettings(enmWhich, SUPLOGGERSETTINGS_WHAT_CREATE, pszFlags, pszGroups, pszDest); 825 } 826 827 828 SUPR3DECL(int) SUPR3LoggerDestroy(SUPLOGGER enmWhich) 829 { 830 return supR3LoggerSettings(enmWhich, SUPLOGGERSETTINGS_WHAT_DESTROY, NULL, NULL, NULL); 831 } 832 833 736 834 SUPR3DECL(int) SUPPageAlloc(size_t cPages, void **ppvPages) 737 835 {
Note:
See TracChangeset
for help on using the changeset viewer.