11 gs.keenan 1.1 //
12 // Permission is hereby granted, free of charge, to any person obtaining a copy
13 // of this software and associated documentation files (the "Software"), to
14 // deal in the Software without restriction, including without limitation the
15 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16 // sell copies of the Software, and to permit persons to whom the Software is
17 // furnished to do so, subject to the following conditions:
18 //
19 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
20 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
21 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
22 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
23 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
25 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 //==============================================================================
29 //
30 // Author: Sushma Fernandes, Hewlett-Packard Company (sushma_fernandes@hp.com)
31 //
32 gs.keenan 1.1 // Modified By:
33 //
34 //%/////////////////////////////////////////////////////////////////////////////
35
36 #include <fcntl.h>
37 #include <Pegasus/Common/Logger.h>
38 #include <Pegasus/Common/System.h>
39 #include <Pegasus/Common/TraceFileHandler.h>
40
41 PEGASUS_USING_STD;
42
43 PEGASUS_NAMESPACE_BEGIN
44
45 ///////////////////////////////////////////////////////////////////////////////
46 // Writes message to file. Locks the file before writing to it
47 // Implementation of this function is platform specific
48 ///////////////////////////////////////////////////////////////////////////////
49 void TraceFileHandler::handleMessage (
50 const char *message,
51 const char *fmt,
52 va_list argList)
53 gs.keenan 1.1 {
54 Sint32 retCode;
55 Sint32 fileDesc;
56
57 // Do not add Trace calls in the Critical section
58 // ---- BEGIN CRITICAL SECTION
59
60 // Check if the file has been deleted, if so re-open the file and continue
61 if (!System::exists (_fileName))
62 {
63 if (_fileHandle == 0)
64 {
65 _fileHandle = fopen (_fileName, "a+", "shr=get,put,upd");
66 // _fileHandle = fopen(_fileName,"a","shr=get");
67 }
68 else
69 {
70 _fileHandle = freopen (_fileName, "a+", _fileHandle, "shr=get,put,upd");
71 // _fileHandle = freopen(_fileName,"a",_fileHandle,"shr=get");
72 }
73 if (!_fileHandle)
74 gs.keenan 1.1 {
75 // Unable to re-open file, log a message
76
77 Logger:: put_l (Logger:: DEBUG_LOG, System:: CIMSERVER, Logger::WARNING,
78 "Common.TraceFileHandlerVms.FAILED_TO_OPEN_FILE",
79 "Failed to open File $0", _fileName);
80 return;
81 }
82
83 //
84 // Set permissions on the trace file to 0400
85 //
86
87 if (!FileSystem::changeFilePermissions (String (_fileName), (S_IRUSR | S_IWUSR)))
88 {
89 Logger:: put_l (Logger:: DEBUG_LOG, "Tracer", Logger::WARNING,
90 "Common.TraceFileHandlerVms.FAILED_TO_SET_FILE_PERMISSIONS",
91 "Failed to set permissions on file $0", _fileName);
92 return;
93 }
94 }
95 gs.keenan 1.1 // Seek to the end of File
96
97 retCode = fseek (_fileHandle, 0, SEEK_END);
98
99 // Write the message to the file
100
101 retCode = fprintf (_fileHandle, "%s", message);
102 retCode = vfprintf (_fileHandle, fmt, argList);
103 retCode = fprintf (_fileHandle, "\n");
104 retCode = fflush (_fileHandle);
105 fileDesc = fileno (_fileHandle);
106 retCode = fsync (fileDesc);
107 _wroteToLog = false;
108 // retCode = fclose(_fileHandle);
109 // _fileHandle = 0;
110
111 // ---- END CRITICAL SECTION
112
113 return;
114 }
115
116 gs.keenan 1.1 PEGASUS_NAMESPACE_END
|