2  * Copyright (c) 2000-2005, 2009-2011, 2013, 2016-2019 Apple Inc. All rights reserved. 
   4  * @APPLE_LICENSE_HEADER_START@ 
   6  * This file contains Original Code and/or Modifications of Original Code 
   7  * as defined in and that are subject to the Apple Public Source License 
   8  * Version 2.0 (the 'License'). You may not use this file except in 
   9  * compliance with the License. Please obtain a copy of the License at 
  10  * http://www.opensource.apple.com/apsl/ and read it before using this 
  13  * The Original Code and all software distributed under the License are 
  14  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  15  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  16  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
  17  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  18  * Please see the License for the specific language governing rights and 
  19  * limitations under the License. 
  21  * @APPLE_LICENSE_HEADER_END@ 
  25  * Modification History 
  27  * May 19, 2001         Allan Nathanson <ajn@apple.com> 
  31 #include "SCDynamicStoreInternal.h" 
  32 #include "config.h"             /* MiG generated file */ 
  35 SCDynamicStoreNotifyValue(SCDynamicStoreRef     store
, 
  38         SCDynamicStorePrivateRef        storePrivate
; 
  40         CFDataRef                       utfKey
;         /* serialized key */ 
  46                 store 
= __SCDynamicStoreNullSession(); 
  48                         /* sorry, you must provide a session */ 
  49                         _SCErrorSet(kSCStatusNoStoreSession
); 
  54         storePrivate 
= (SCDynamicStorePrivateRef
)store
; 
  55         if (storePrivate
->server 
== MACH_PORT_NULL
) { 
  56                 /* sorry, you must have an open session to play */ 
  57                 _SCErrorSet(kSCStatusNoStoreServer
); 
  61         if (storePrivate
->cache_active
) { 
  62                 if (storePrivate
->cached_notifys 
== NULL
)  { 
  63                         storePrivate
->cached_notifys 
= CFArrayCreateMutable(NULL
, 
  65                                                                             &kCFTypeArrayCallBacks
); 
  68                 if (!CFArrayContainsValue(storePrivate
->cached_notifys
, 
  69                                           CFRangeMake(0, CFArrayGetCount(storePrivate
->cached_notifys
)), 
  71                         CFArrayAppendValue(storePrivate
->cached_notifys
, key
); 
  77         /* serialize the key */ 
  78         if (!_SCSerializeString(key
, &utfKey
, (void **)&myKeyRef
, &myKeyLen
)) { 
  79                 _SCErrorSet(kSCStatusFailed
); 
  85         /* send the key to the server */ 
  86         status 
= confignotify(storePrivate
->server
, 
  88                               (mach_msg_type_number_t
)myKeyLen
, 
  91         if (__SCDynamicStoreCheckRetryAndHandleError(store
, 
  94                                                      "SCDynamicStoreNotifyValue confignotify()")) { 
 101         if (sc_status 
!= kSCStatusOK
) { 
 102                 _SCErrorSet(sc_status
);