status_t ServerRepositoryDataUpdateProcess::ProcessLocalData() { DepotMatchingRepositoryListener* itemListener = new DepotMatchingRepositoryListener(fModel, this); ObjectDeleter<DepotMatchingRepositoryListener> itemListenerDeleter(itemListener); BulkContainerDumpExportRepositoryJsonListener* listener = new BulkContainerDumpExportRepositoryJsonListener(itemListener); ObjectDeleter<BulkContainerDumpExportRepositoryJsonListener> listenerDeleter(listener); BPath localPath; status_t result = GetLocalPath(localPath); if (result != B_OK) return result; result = ParseJsonFromFileWithListener(listener, localPath); if (result != B_OK) return result; return listener->ErrorStatus(); }
status_t StartListening(int32 object, uint32 flags, port_id port, int32 token) { // check the parameters if ((object < 0 && object != -1) || port < 0) return B_BAD_VALUE; if ((flags & B_WATCH_SYSTEM_ALL) == 0 || (flags & ~(uint32)B_WATCH_SYSTEM_ALL) != 0) { return B_BAD_VALUE; } MutexLocker locker(fLock); // maybe the listener already exists ListenerList* listenerList; Listener* listener = _FindListener(object, port, token, listenerList); if (listener != NULL) { // just add the new flags listener->flags |= flags; return B_OK; } // create a new listener listener = new(std::nothrow) Listener; if (listener == NULL) return B_NO_MEMORY; ObjectDeleter<Listener> listenerDeleter(listener); listener->port = port; listener->token = token; listener->flags = flags; // if there's no list yet, create a new list if (listenerList == NULL) { listenerList = new(std::nothrow) ListenerList; if (listenerList == NULL) return B_NO_MEMORY; listenerList->object = object; fTeamListeners.Insert(listenerList); } listener->list = listenerList; listenerList->listeners.Add(listener); listenerDeleter.Detach(); team_associate_data(listener); return B_OK; }