| File: | sm_manager.c |
| Location: | line 201, column 5 |
| Description: | Dereference of null pointer |
| 1 | /* | |||||
| 2 | ||||||
| 3 | Copyright 1993, 1998 The Open Group | |||||
| 4 | ||||||
| 5 | Permission to use, copy, modify, distribute, and sell this software and its | |||||
| 6 | documentation for any purpose is hereby granted without fee, provided that | |||||
| 7 | the above copyright notice appear in all copies and that both that | |||||
| 8 | copyright notice and this permission notice appear in supporting | |||||
| 9 | documentation. | |||||
| 10 | ||||||
| 11 | The above copyright notice and this permission notice shall be included in | |||||
| 12 | all copies or substantial portions of the Software. | |||||
| 13 | ||||||
| 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
| 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
| 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
| 17 | OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | |||||
| 18 | AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||||
| 19 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||||
| 20 | ||||||
| 21 | Except as contained in this notice, the name of The Open Group shall not be | |||||
| 22 | used in advertising or otherwise to promote the sale, use or other dealings | |||||
| 23 | in this Software without prior written authorization from The Open Group. | |||||
| 24 | ||||||
| 25 | */ | |||||
| 26 | ||||||
| 27 | /* | |||||
| 28 | * Author: Ralph Mor, X Consortium | |||||
| 29 | */ | |||||
| 30 | ||||||
| 31 | #ifdef HAVE_CONFIG_H1 | |||||
| 32 | #include <config.h> | |||||
| 33 | #endif | |||||
| 34 | #include <X11/SM/SMlib.h> | |||||
| 35 | #include "SMlibint.h" | |||||
| 36 | #include <X11/Xtrans/Xtrans.h> | |||||
| 37 | ||||||
| 38 | #ifdef __UNIXWARE__ | |||||
| 39 | #undef shutdown | |||||
| 40 | #endif | |||||
| 41 | ||||||
| 42 | ||||||
| 43 | ||||||
| 44 | static Statusint | |||||
| 45 | _SmsProtocolSetupProc (IceConn iceConn, | |||||
| 46 | int majorVersion, | |||||
| 47 | int minorVersion, | |||||
| 48 | char *vendor, | |||||
| 49 | char *release, | |||||
| 50 | IcePointer *clientDataRet, | |||||
| 51 | char **failureReasonRet) | |||||
| 52 | { | |||||
| 53 | SmsConn smsConn; | |||||
| 54 | unsigned long mask; | |||||
| 55 | Statusint status; | |||||
| 56 | ||||||
| 57 | /* | |||||
| 58 | * vendor/release are undefined for ProtocolSetup in XSMP. | |||||
| 59 | */ | |||||
| 60 | ||||||
| 61 | if (vendor) | |||||
| 62 | free (vendor); | |||||
| 63 | if (release) | |||||
| 64 | free (release); | |||||
| 65 | ||||||
| 66 | ||||||
| 67 | /* | |||||
| 68 | * Allocate new SmsConn. | |||||
| 69 | */ | |||||
| 70 | ||||||
| 71 | if ((smsConn = malloc (sizeof (struct _SmsConn))) == NULL((void *)0)) | |||||
| 72 | { | |||||
| 73 | const char *str = "Memory allocation failed"; | |||||
| 74 | ||||||
| 75 | *failureReasonRet = strdup (str); | |||||
| 76 | ||||||
| 77 | return (0); | |||||
| 78 | } | |||||
| 79 | ||||||
| 80 | smsConn->iceConn = iceConn; | |||||
| 81 | smsConn->proto_major_version = majorVersion; | |||||
| 82 | smsConn->proto_minor_version = minorVersion; | |||||
| 83 | smsConn->client_id = NULL((void *)0); | |||||
| 84 | ||||||
| 85 | smsConn->save_yourself_in_progress = False0; | |||||
| 86 | smsConn->interaction_allowed = SmInteractStyleNone0; | |||||
| 87 | smsConn->can_cancel_shutdown = False0; | |||||
| 88 | smsConn->interact_in_progress = False0; | |||||
| 89 | ||||||
| 90 | *clientDataRet = (IcePointer) smsConn; | |||||
| 91 | ||||||
| 92 | ||||||
| 93 | /* | |||||
| 94 | * Now give the session manager the new smsConn and get back the | |||||
| 95 | * callbacks to invoke when messages arrive from the client. | |||||
| 96 | * | |||||
| 97 | * In the future, we can use the mask return value to check | |||||
| 98 | * if the SM is expecting an older rev of SMlib. | |||||
| 99 | */ | |||||
| 100 | ||||||
| 101 | bzero ((char *) &smsConn->callbacks, sizeof (SmsCallbacks))__builtin___memset_chk ((char *) &smsConn->callbacks, 0 , sizeof (SmsCallbacks), __builtin_object_size ((char *) & smsConn->callbacks, 0)); | |||||
| 102 | ||||||
| 103 | status = (*_SmsNewClientProc) (smsConn, _SmsNewClientData, | |||||
| 104 | &mask, &smsConn->callbacks, failureReasonRet); | |||||
| 105 | ||||||
| 106 | return (status); | |||||
| 107 | } | |||||
| 108 | ||||||
| 109 | ||||||
| 110 | ||||||
| 111 | ||||||
| 112 | Statusint | |||||
| 113 | SmsInitialize(const char *vendor, const char *release, | |||||
| 114 | SmsNewClientProc newClientProc, | |||||
| 115 | SmPointer managerData, IceHostBasedAuthProc hostBasedAuthProc, | |||||
| 116 | int errorLength, char *errorStringRet) | |||||
| 117 | { | |||||
| 118 | const char *auth_names[] = {"MIT-MAGIC-COOKIE-1"}; | |||||
| 119 | IcePaAuthProc auth_procs[] = {_IcePaMagicCookie1Proc}; | |||||
| 120 | int auth_count = 1; | |||||
| 121 | ||||||
| 122 | IcePaVersionRec versions[] = { | |||||
| 123 | {SmProtoMajor1, SmProtoMinor0, _SmsProcessMessage} | |||||
| 124 | }; | |||||
| 125 | int version_count = 1; | |||||
| 126 | ||||||
| 127 | if (errorStringRet && errorLength > 0) | |||||
| 128 | *errorStringRet = '\0'; | |||||
| 129 | ||||||
| 130 | if (!newClientProc) | |||||
| 131 | { | |||||
| 132 | if (errorStringRet && errorLength > 0) { | |||||
| 133 | strncpy (errorStringRet,__builtin___strncpy_chk (errorStringRet, "The SmsNewClientProc callback can't be NULL" , errorLength, __builtin_object_size (errorStringRet, 2 > 1 ? 1 : 0)) | |||||
| 134 | "The SmsNewClientProc callback can't be NULL",__builtin___strncpy_chk (errorStringRet, "The SmsNewClientProc callback can't be NULL" , errorLength, __builtin_object_size (errorStringRet, 2 > 1 ? 1 : 0)) | |||||
| 135 | errorLength)__builtin___strncpy_chk (errorStringRet, "The SmsNewClientProc callback can't be NULL" , errorLength, __builtin_object_size (errorStringRet, 2 > 1 ? 1 : 0)); | |||||
| 136 | errorStringRet[errorLength - 1] = '\0'; | |||||
| 137 | } | |||||
| 138 | ||||||
| 139 | return (0); | |||||
| 140 | } | |||||
| 141 | ||||||
| 142 | if (!_SmsOpcode) | |||||
| 143 | { | |||||
| 144 | ||||||
| 145 | if ((_SmsOpcode = IceRegisterForProtocolReply ("XSMP", | |||||
| 146 | vendor, release, version_count, versions, | |||||
| 147 | auth_count, auth_names, auth_procs, hostBasedAuthProc, | |||||
| 148 | _SmsProtocolSetupProc, | |||||
| 149 | NULL((void *)0), /* IceProtocolActivateProc - we don't care about | |||||
| 150 | when the Protocol Reply is sent, because the | |||||
| 151 | session manager can not immediately send a | |||||
| 152 | message - it must wait for RegisterClient. */ | |||||
| 153 | NULL((void *)0) /* IceIOErrorProc */ | |||||
| 154 | )) < 0) | |||||
| 155 | { | |||||
| 156 | if (errorStringRet && errorLength > 0) { | |||||
| 157 | strncpy (errorStringRet,__builtin___strncpy_chk (errorStringRet, "Could not register XSMP protocol with ICE" , errorLength, __builtin_object_size (errorStringRet, 2 > 1 ? 1 : 0)) | |||||
| 158 | "Could not register XSMP protocol with ICE",__builtin___strncpy_chk (errorStringRet, "Could not register XSMP protocol with ICE" , errorLength, __builtin_object_size (errorStringRet, 2 > 1 ? 1 : 0)) | |||||
| 159 | errorLength)__builtin___strncpy_chk (errorStringRet, "Could not register XSMP protocol with ICE" , errorLength, __builtin_object_size (errorStringRet, 2 > 1 ? 1 : 0)); | |||||
| 160 | errorStringRet[errorLength - 1] = '\0'; | |||||
| 161 | } | |||||
| 162 | return (0); | |||||
| 163 | } | |||||
| 164 | } | |||||
| 165 | ||||||
| 166 | _SmsNewClientProc = newClientProc; | |||||
| 167 | _SmsNewClientData = managerData; | |||||
| 168 | ||||||
| 169 | return (1); | |||||
| 170 | } | |||||
| 171 | ||||||
| 172 | ||||||
| 173 | ||||||
| 174 | char * | |||||
| 175 | SmsClientHostName(SmsConn smsConn) | |||||
| 176 | { | |||||
| 177 | return (IceGetPeerName (smsConn->iceConn)); | |||||
| 178 | } | |||||
| 179 | ||||||
| 180 | ||||||
| 181 | ||||||
| 182 | Statusint | |||||
| 183 | SmsRegisterClientReply(SmsConn smsConn, char *clientId) | |||||
| 184 | { | |||||
| 185 | IceConn iceConn = smsConn->iceConn; | |||||
| 186 | size_t extra; | |||||
| 187 | smRegisterClientReplyMsg *pMsg; | |||||
| 188 | char *pData; | |||||
| 189 | ||||||
| 190 | if ((smsConn->client_id = strdup (clientId)) == NULL((void *)0)) | |||||
| ||||||
| 191 | { | |||||
| 192 | return (0); | |||||
| 193 | } | |||||
| 194 | ||||||
| 195 | extra = ARRAY8_BYTES (strlen (clientId))(4 + strlen (clientId) + ((8 - ((unsigned int) (4 + strlen (clientId )) % 8)) % 8)); | |||||
| 196 | ||||||
| 197 | IceGetHeaderExtra (iceConn, _SmsOpcode, SM_RegisterClientReply,if ((iceConn->outbufptr + 8 + (((((unsigned int) ((extra) + 7)) >> 3)) << 3)) > iceConn->outbufmax) IceFlush (iceConn); pMsg = (smRegisterClientReplyMsg *) iceConn->outbufptr ; if ((iceConn->outbufptr + 8 + (((((unsigned int) ((extra ) + 7)) >> 3)) << 3)) <= iceConn->outbufmax ) pData = (char *) pMsg + 8; else pData = ((void *)0); pMsg-> majorOpcode = _SmsOpcode; pMsg->minorOpcode = 2; pMsg-> length = ((8 - 8) >> 3) + ((((unsigned int) ((extra) + 7 )) >> 3)); iceConn->outbufptr += (8 + (((((unsigned int ) ((extra) + 7)) >> 3)) << 3)); iceConn->send_sequence ++ | |||||
| 198 | SIZEOF (smRegisterClientReplyMsg), WORD64COUNT (extra),if ((iceConn->outbufptr + 8 + (((((unsigned int) ((extra) + 7)) >> 3)) << 3)) > iceConn->outbufmax) IceFlush (iceConn); pMsg = (smRegisterClientReplyMsg *) iceConn->outbufptr ; if ((iceConn->outbufptr + 8 + (((((unsigned int) ((extra ) + 7)) >> 3)) << 3)) <= iceConn->outbufmax ) pData = (char *) pMsg + 8; else pData = ((void *)0); pMsg-> majorOpcode = _SmsOpcode; pMsg->minorOpcode = 2; pMsg-> length = ((8 - 8) >> 3) + ((((unsigned int) ((extra) + 7 )) >> 3)); iceConn->outbufptr += (8 + (((((unsigned int ) ((extra) + 7)) >> 3)) << 3)); iceConn->send_sequence ++ | |||||
| 199 | smRegisterClientReplyMsg, pMsg, pData)if ((iceConn->outbufptr + 8 + (((((unsigned int) ((extra) + 7)) >> 3)) << 3)) > iceConn->outbufmax) IceFlush (iceConn); pMsg = (smRegisterClientReplyMsg *) iceConn->outbufptr ; if ((iceConn->outbufptr + 8 + (((((unsigned int) ((extra ) + 7)) >> 3)) << 3)) <= iceConn->outbufmax ) pData = (char *) pMsg + 8; else pData = ((void *)0); pMsg-> majorOpcode = _SmsOpcode; pMsg->minorOpcode = 2; pMsg-> length = ((8 - 8) >> 3) + ((((unsigned int) ((extra) + 7 )) >> 3)); iceConn->outbufptr += (8 + (((((unsigned int ) ((extra) + 7)) >> 3)) << 3)); iceConn->send_sequence ++; | |||||
| 200 | ||||||
| 201 | STORE_ARRAY8 (pData, strlen (clientId), clientId){ { *((CARD32 *) pData) = (CARD32) strlen (clientId); pData += 4; }; if (strlen (clientId)) __builtin___memcpy_chk (pData, clientId , strlen (clientId), __builtin_object_size (pData, 0)); pData += strlen (clientId) + ((8 - ((unsigned int) (4 + strlen (clientId )) % 8)) % 8); }; | |||||
| ||||||
| 202 | ||||||
| 203 | IceFlush (iceConn); | |||||
| 204 | ||||||
| 205 | return (1); | |||||
| 206 | } | |||||
| 207 | ||||||
| 208 | ||||||
| 209 | ||||||
| 210 | void | |||||
| 211 | SmsSaveYourself(SmsConn smsConn, int saveType, Boolint shutdown, | |||||
| 212 | int interactStyle, Boolint fast) | |||||
| 213 | { | |||||
| 214 | IceConn iceConn = smsConn->iceConn; | |||||
| 215 | smSaveYourselfMsg *pMsg; | |||||
| 216 | ||||||
| 217 | IceGetHeader (iceConn, _SmsOpcode, SM_SaveYourself,if ((iceConn->outbufptr + 16) > iceConn->outbufmax) IceFlush (iceConn); pMsg = (smSaveYourselfMsg *) iceConn->outbufptr ; pMsg->majorOpcode = _SmsOpcode; pMsg->minorOpcode = 3 ; pMsg->length = (16 - 8) >> 3; iceConn->outbufptr += 16; iceConn->send_sequence++ | |||||
| 218 | SIZEOF (smSaveYourselfMsg), smSaveYourselfMsg, pMsg)if ((iceConn->outbufptr + 16) > iceConn->outbufmax) IceFlush (iceConn); pMsg = (smSaveYourselfMsg *) iceConn->outbufptr ; pMsg->majorOpcode = _SmsOpcode; pMsg->minorOpcode = 3 ; pMsg->length = (16 - 8) >> 3; iceConn->outbufptr += 16; iceConn->send_sequence++; | |||||
| 219 | ||||||
| 220 | pMsg->saveType = saveType; | |||||
| 221 | pMsg->shutdown = shutdown; | |||||
| 222 | pMsg->interactStyle = interactStyle; | |||||
| 223 | pMsg->fast = fast; | |||||
| 224 | ||||||
| 225 | IceFlush (iceConn); | |||||
| 226 | ||||||
| 227 | smsConn->save_yourself_in_progress = True1; | |||||
| 228 | ||||||
| 229 | if (interactStyle == SmInteractStyleNone0 || | |||||
| 230 | interactStyle == SmInteractStyleErrors1 || | |||||
| 231 | interactStyle == SmInteractStyleAny2) | |||||
| 232 | { | |||||
| 233 | smsConn->interaction_allowed = interactStyle; | |||||
| 234 | } | |||||
| 235 | else | |||||
| 236 | { | |||||
| 237 | smsConn->interaction_allowed = SmInteractStyleNone0; | |||||
| 238 | } | |||||
| 239 | ||||||
| 240 | smsConn->can_cancel_shutdown = shutdown && | |||||
| 241 | (interactStyle == SmInteractStyleAny2 || | |||||
| 242 | interactStyle == SmInteractStyleErrors1); | |||||
| 243 | } | |||||
| 244 | ||||||
| 245 | ||||||
| 246 | ||||||
| 247 | void | |||||
| 248 | SmsSaveYourselfPhase2(SmsConn smsConn) | |||||
| 249 | { | |||||
| 250 | IceConn iceConn = smsConn->iceConn; | |||||
| 251 | ||||||
| 252 | IceSimpleMessage (iceConn, _SmsOpcode, SM_SaveYourselfPhase2){ iceMsg *_pMsg; if ((iceConn->outbufptr + 8) > iceConn ->outbufmax) IceFlush (iceConn); _pMsg = (iceMsg *) iceConn ->outbufptr; _pMsg->majorOpcode = _SmsOpcode; _pMsg-> minorOpcode = 17; _pMsg->length = (8 - 8) >> 3; iceConn ->outbufptr += 8; iceConn->send_sequence++; }; | |||||
| 253 | IceFlush (iceConn); | |||||
| 254 | } | |||||
| 255 | ||||||
| 256 | ||||||
| 257 | ||||||
| 258 | void | |||||
| 259 | SmsInteract(SmsConn smsConn) | |||||
| 260 | { | |||||
| 261 | IceConn iceConn = smsConn->iceConn; | |||||
| 262 | ||||||
| 263 | IceSimpleMessage (iceConn, _SmsOpcode, SM_Interact){ iceMsg *_pMsg; if ((iceConn->outbufptr + 8) > iceConn ->outbufmax) IceFlush (iceConn); _pMsg = (iceMsg *) iceConn ->outbufptr; _pMsg->majorOpcode = _SmsOpcode; _pMsg-> minorOpcode = 6; _pMsg->length = (8 - 8) >> 3; iceConn ->outbufptr += 8; iceConn->send_sequence++; }; | |||||
| 264 | IceFlush (iceConn); | |||||
| 265 | ||||||
| 266 | smsConn->interact_in_progress = True1; | |||||
| 267 | } | |||||
| 268 | ||||||
| 269 | ||||||
| 270 | ||||||
| 271 | void | |||||
| 272 | SmsDie(SmsConn smsConn) | |||||
| 273 | { | |||||
| 274 | IceConn iceConn = smsConn->iceConn; | |||||
| 275 | ||||||
| 276 | IceSimpleMessage (iceConn, _SmsOpcode, SM_Die){ iceMsg *_pMsg; if ((iceConn->outbufptr + 8) > iceConn ->outbufmax) IceFlush (iceConn); _pMsg = (iceMsg *) iceConn ->outbufptr; _pMsg->majorOpcode = _SmsOpcode; _pMsg-> minorOpcode = 9; _pMsg->length = (8 - 8) >> 3; iceConn ->outbufptr += 8; iceConn->send_sequence++; }; | |||||
| 277 | IceFlush (iceConn); | |||||
| 278 | } | |||||
| 279 | ||||||
| 280 | ||||||
| 281 | ||||||
| 282 | void | |||||
| 283 | SmsSaveComplete(SmsConn smsConn) | |||||
| 284 | { | |||||
| 285 | IceConn iceConn = smsConn->iceConn; | |||||
| 286 | ||||||
| 287 | IceSimpleMessage (iceConn, _SmsOpcode, SM_SaveComplete){ iceMsg *_pMsg; if ((iceConn->outbufptr + 8) > iceConn ->outbufmax) IceFlush (iceConn); _pMsg = (iceMsg *) iceConn ->outbufptr; _pMsg->majorOpcode = _SmsOpcode; _pMsg-> minorOpcode = 18; _pMsg->length = (8 - 8) >> 3; iceConn ->outbufptr += 8; iceConn->send_sequence++; }; | |||||
| 288 | IceFlush (iceConn); | |||||
| 289 | } | |||||
| 290 | ||||||
| 291 | ||||||
| 292 | ||||||
| 293 | void | |||||
| 294 | SmsShutdownCancelled(SmsConn smsConn) | |||||
| 295 | { | |||||
| 296 | IceConn iceConn = smsConn->iceConn; | |||||
| 297 | ||||||
| 298 | IceSimpleMessage (iceConn, _SmsOpcode, SM_ShutdownCancelled){ iceMsg *_pMsg; if ((iceConn->outbufptr + 8) > iceConn ->outbufmax) IceFlush (iceConn); _pMsg = (iceMsg *) iceConn ->outbufptr; _pMsg->majorOpcode = _SmsOpcode; _pMsg-> minorOpcode = 10; _pMsg->length = (8 - 8) >> 3; iceConn ->outbufptr += 8; iceConn->send_sequence++; }; | |||||
| 299 | IceFlush (iceConn); | |||||
| 300 | ||||||
| 301 | smsConn->can_cancel_shutdown = False0; | |||||
| 302 | } | |||||
| 303 | ||||||
| 304 | ||||||
| 305 | ||||||
| 306 | void | |||||
| 307 | SmsReturnProperties(SmsConn smsConn, int numProps, SmProp **props) | |||||
| 308 | { | |||||
| 309 | IceConn iceConn = smsConn->iceConn; | |||||
| 310 | unsigned int bytes; | |||||
| 311 | smPropertiesReplyMsg *pMsg; | |||||
| 312 | char *pBuf; | |||||
| 313 | char *pStart; | |||||
| 314 | ||||||
| 315 | IceGetHeader (iceConn, _SmsOpcode, SM_PropertiesReply,if ((iceConn->outbufptr + 8) > iceConn->outbufmax) IceFlush (iceConn); pMsg = (smPropertiesReplyMsg *) iceConn->outbufptr ; pMsg->majorOpcode = _SmsOpcode; pMsg->minorOpcode = 15 ; pMsg->length = (8 - 8) >> 3; iceConn->outbufptr += 8; iceConn->send_sequence++ | |||||
| 316 | SIZEOF (smPropertiesReplyMsg), smPropertiesReplyMsg, pMsg)if ((iceConn->outbufptr + 8) > iceConn->outbufmax) IceFlush (iceConn); pMsg = (smPropertiesReplyMsg *) iceConn->outbufptr ; pMsg->majorOpcode = _SmsOpcode; pMsg->minorOpcode = 15 ; pMsg->length = (8 - 8) >> 3; iceConn->outbufptr += 8; iceConn->send_sequence++; | |||||
| 317 | ||||||
| 318 | LISTOF_PROP_BYTES (numProps, props, bytes){ int _i, _j; bytes = 8; for (_i = 0; _i < numProps; _i++) { bytes += (8 + (4 + strlen (props[_i]->name) + ((8 - ((unsigned int) (4 + strlen (props[_i]->name)) % 8)) % 8)) + (4 + strlen (props[_i]->type) + ((8 - ((unsigned int) (4 + strlen (props [_i]->type)) % 8)) % 8))); for (_j = 0; _j < props[_i]-> num_vals; _j++) bytes += (4 + props[_i]->vals[_j].length + ((8 - ((unsigned int) (4 + props[_i]->vals[_j].length) % 8 )) % 8)); } }; | |||||
| 319 | pMsg->length += WORD64COUNT (bytes)(((unsigned int) ((bytes) + 7)) >> 3); | |||||
| 320 | ||||||
| 321 | pBuf = pStart = IceAllocScratch (iceConn, bytes); | |||||
| 322 | ||||||
| 323 | STORE_LISTOF_PROPERTY (pBuf, numProps, props){ int _i, _j; { *((CARD32 *) pBuf) = numProps; pBuf += 4; }; pBuf += 4; for (_i = 0; _i < numProps; _i++) { { { *((CARD32 * ) pBuf) = (CARD32) strlen (props[_i]->name); pBuf += 4; }; if (strlen (props[_i]->name)) __builtin___memcpy_chk (pBuf , props[_i]->name, strlen (props[_i]->name), __builtin_object_size (pBuf, 0)); pBuf += strlen (props[_i]->name) + ((8 - ((unsigned int) (4 + strlen (props[_i]->name)) % 8)) % 8); }; { { *( (CARD32 *) pBuf) = (CARD32) strlen (props[_i]->type); pBuf += 4; }; if (strlen (props[_i]->type)) __builtin___memcpy_chk (pBuf, props[_i]->type, strlen (props[_i]->type), __builtin_object_size (pBuf, 0)); pBuf += strlen (props[_i]->type) + ((8 - ((unsigned int) (4 + strlen (props[_i]->type)) % 8)) % 8); }; { *((CARD32 *) pBuf) = props[_i]->num_vals; pBuf += 4; }; pBuf += 4; for (_j = 0; _j < props[_i]->num_vals; _j++) { { { *((CARD32 *) pBuf) = (CARD32) props[_i]->vals[_j].length; pBuf += 4 ; }; if (props[_i]->vals[_j].length) __builtin___memcpy_chk (pBuf, (char *) props[_i]->vals[_j].value, props[_i]-> vals[_j].length, __builtin_object_size (pBuf, 0)); pBuf += props [_i]->vals[_j].length + ((8 - ((unsigned int) (4 + props[_i ]->vals[_j].length) % 8)) % 8); }; } } }; | |||||
| 324 | ||||||
| 325 | IceWriteData (iceConn, bytes, pStart){ if ((iceConn->outbufptr + (bytes)) > iceConn->outbufmax ) { IceFlush (iceConn); _IceWrite (iceConn, (unsigned long) ( bytes), pStart); } else { __builtin___memcpy_chk (iceConn-> outbufptr, pStart, bytes, __builtin_object_size (iceConn-> outbufptr, 0)); iceConn->outbufptr += (bytes); } }; | |||||
| 326 | IceFlush (iceConn); | |||||
| 327 | } | |||||
| 328 | ||||||
| 329 | ||||||
| 330 | ||||||
| 331 | void | |||||
| 332 | SmsCleanUp(SmsConn smsConn) | |||||
| 333 | { | |||||
| 334 | IceProtocolShutdown (smsConn->iceConn, _SmsOpcode); | |||||
| 335 | ||||||
| 336 | if (smsConn->client_id) | |||||
| 337 | free (smsConn->client_id); | |||||
| 338 | ||||||
| 339 | free (smsConn); | |||||
| 340 | } |