int classad_get_attribute_names(classad_context cad, char ***results) { if (cad == NULL) return C_CLASSAD_INVALID_CONTEXT; if (results == NULL) return C_CLASSAD_INVALID_ARG; ClassAd *ad = (ClassAd *)cad; int n_results = 0; ClassAd::const_iterator it; for (it = ad->begin(); it != ad->end(); ++it) { n_results++; char **new_results; new_results = (char **)realloc(*results, (n_results+1)*sizeof(char *)); if (new_results == NULL) { return C_CLASSAD_OUT_OF_MEMORY; } (*results) = new_results; (*results)[n_results] = NULL; (*results)[n_results-1] = strdup(it->first.c_str()); if (((*results)[n_results-1]) == NULL) { return C_CLASSAD_OUT_OF_MEMORY; } } return C_CLASSAD_NO_ERROR; }