// creates a directory and all its parent directories that don't exist yet bool CreateAll(const WCHAR *dir) { ScopedMem<WCHAR> parent(path::GetDir(dir)); if (!str::Eq(parent, dir) && !Exists(parent)) CreateAll(parent); return Create(dir); }
int main(int argc, char* argv[]) { ADTErr err; CdrStock* cdrQ; ProtecQueue* dataQ; sig sigBill, sigProc, sigFriends; sigset_t blockMask; Params ptr; LogCreate(LOG_MODE, LOG_NAME); Args* args = malloc(GetSizeOfArgs()); if (NULL == args) { ERR_PRINT("allocation failed, %s", "args"); return -1; } ArgsSet(args, argc, argv); DEBUG_PRINT("Path given: %s", GetPath(args, &err)); if (ERR_OK != CreateAll(&cdrQ, &dataQ)) { ERR_PRINT("%s", "failed to create queues"); free(args); return -1; } if (ERR_OK != SignalInitAll( &sigBill, &sigProc, &sigFriends, &blockMask) ) { free(args); return -1; } ptr.m_sizeIsdn = GetSubscriberHashSize(args, &err); ptr.m_sizeOperator = GetOperatorHashSize(args, &err); ptr.m_queue = dataQ; if (ERR_OK != InsertAllCdrFiles(cdrQ, GetPath(args, &err))) { ERR_PRINT("%s", "failed: InsertAllCdrFiles"); free(args); return -1; } if (ERR_OK != StartReadingThreads(NUM_OF_THREADS, cdrQ, dataQ)) { ERR_PRINT("%s", "failed: StartReadingThread"); free(args); return -1; } if (0 != pthread_create(&s_tidProc, NULL, ProcessorWork, (void*)&ptr)) { ERR_PRINT("%s", "failed: pthread_create"); free(args); return -1; } if (0 != pthread_join(s_tidProc, NULL)) { ERR_PRINT("%s", "failed: pthread_join"); free(args); return -1; } if (ERR_OK != DestroyAll(&cdrQ, &dataQ)) { ERR_PRINT("%s", "failed: DestroyAll"); free(args); return -1; } free(args); return 0; }