static int adm_hwdb(struct udev *udev, int argc, char *argv[]) { static const struct option options[] = { { "update", no_argument, NULL, 'u' }, { "root", required_argument, NULL, 'r' }, { "test", required_argument, NULL, 't' }, { "help", no_argument, NULL, 'h' }, {} }; const char *test = NULL; const char *root = ""; bool update = false; struct trie *trie = NULL; int err; int rc = EXIT_SUCCESS; for (;;) { int option; option = getopt_long(argc, argv, "ut:r:h", options, NULL); if (option == -1) break; switch (option) { case 'u': update = true; break; case 't': test = optarg; break; case 'r': root = optarg; break; case 'h': help(); return EXIT_SUCCESS; } } if (!update && !test) { help(); return EXIT_SUCCESS; } if (update) { char **files, **f; _cleanup_free_ char *hwdb_bin = NULL; trie = calloc(sizeof(struct trie), 1); if (!trie) { rc = EXIT_FAILURE; goto out; } /* string store */ trie->strings = strbuf_new(); if (!trie->strings) { rc = EXIT_FAILURE; goto out; } /* index */ trie->root = calloc(sizeof(struct trie_node), 1); if (!trie->root) { rc = EXIT_FAILURE; goto out; } trie->nodes_count++; err = conf_files_list_strv(&files, ".hwdb", root, (const char **)conf_file_dirs); if (err < 0) { log_error("failed to enumerate hwdb files: %s\n", strerror(-err)); rc = EXIT_FAILURE; goto out; } STRV_FOREACH(f, files) { log_debug("reading file '%s'", *f); import_file(trie, *f); } strv_free(files); strbuf_complete(trie->strings); log_debug("=== trie in-memory ===\n"); log_debug("nodes: %8zu bytes (%8zu)\n", trie->nodes_count * sizeof(struct trie_node), trie->nodes_count); log_debug("children arrays: %8zu bytes (%8zu)\n", trie->children_count * sizeof(struct trie_child_entry), trie->children_count); log_debug("values arrays: %8zu bytes (%8zu)\n", trie->values_count * sizeof(struct trie_value_entry), trie->values_count); log_debug("strings: %8zu bytes\n", trie->strings->len); log_debug("strings incoming: %8zu bytes (%8zu)\n", trie->strings->in_len, trie->strings->in_count); log_debug("strings dedup'ed: %8zu bytes (%8zu)\n", trie->strings->dedup_len, trie->strings->dedup_count); if (asprintf(&hwdb_bin, "%s/etc/udev/hwdb.bin", root) < 0) { rc = EXIT_FAILURE; goto out; } mkdir_parents(hwdb_bin, 0755); err = trie_store(trie, hwdb_bin); if (err < 0) { log_error("Failure writing database %s: %s", hwdb_bin, strerror(-err)); rc = EXIT_FAILURE; } }
void LLObjectBackup::importObject_continued(AIFilePicker* filepicker) { if (!filepicker->hasFilename()) { // User canceled save. return; } std::string file_name = filepicker->getFilename(); mFolder = gDirUtilp->getDirName(file_name); llifstream import_file(file_name); LLSDSerialize::fromXML(mLLSD, import_file); import_file.close(); show(false); mAgentPos = gAgent.getPositionAgent(); mAgentRot = LLQuaternion(gAgent.getAtAxis(), gAgent.getLeftAxis(), gAgent.getUpAxis()); // Get the texture map LLSD::map_const_iterator prim_it; LLSD::array_const_iterator prim_arr_it; mCurObject = 1; mCurPrim = 1; mObjects = mLLSD["data"].size(); mPrims = 0; mRezCount = 0; updateImportNumbers(); for (prim_arr_it = mLLSD["data"].beginArray(); prim_arr_it != mLLSD["data"].endArray(); prim_arr_it++) { LLSD llsd2 = (*prim_arr_it)["group_body"]; for (prim_it = llsd2.beginMap(); prim_it != llsd2.endMap(); prim_it++) { LLSD prim_llsd = llsd2[prim_it->first]; LLSD::array_iterator text_it; std::list<LLUUID>::iterator iter; if (prim_llsd.has("sculpt")) { LLSculptParams* sculpt = new LLSculptParams(); sculpt->fromLLSD(prim_llsd["sculpt"]); LLUUID orig = sculpt->getSculptTexture(); bool alreadyseen = false; for (iter = mTexturesList.begin(); iter != mTexturesList.end(); iter++) { if ((*iter) == orig) alreadyseen = true; } if (alreadyseen == false) { LL_INFOS("ObjectBackup") << "Found a new SCULPT texture to upload " << orig << LL_ENDL; mTexturesList.push_back(orig); } } LLSD te_llsd = prim_llsd["textures"]; for (text_it = te_llsd.beginArray(); text_it != te_llsd.endArray(); text_it++) { LLSD the_te = (*text_it); LLTextureEntry te; te.fromLLSD(the_te); LLUUID id = te.getID(); if (id != LL_TEXTURE_PLYWOOD && id != LL_TEXTURE_BLANK && id != LL_TEXTURE_INVISIBLE) // Do not upload the default textures { bool alreadyseen = false; for (iter = mTexturesList.begin(); iter != mTexturesList.end(); iter++) { if ((*iter) == te.getID()) alreadyseen = true; } if (alreadyseen == false) { LL_INFOS("ObjectBackup") << "Found a new texture to upload "<< te.getID() << LL_ENDL; mTexturesList.push_back(te.getID()); } } } } } if (mRetexture == TRUE) uploadNextAsset(); else importFirstObject(); }
void LLObjectBackup::importObject_continued(AIFilePicker* filepicker) { if (!filepicker->hasFilename()) { // User canceled save. return; } std::string file_name = filepicker->getFilename(); mFolder = gDirUtilp->getDirName(file_name); llifstream import_file(file_name); LLSDSerialize::fromXML(mLLSD, import_file); import_file.close(); if (!mLLSD.has("data")) { LLNotificationsUtil::add("ImportFailed"); destroy(); return; } showFloater(false); mAgentPos = gAgent.getPositionAgent(); mAgentRot = LLQuaternion(gAgent.getAtAxis(), gAgent.getLeftAxis(), gAgent.getUpAxis()); // Get the texture map mCurObject = 1; mCurPrim = 1; mObjects = mLLSD["data"].size(); mPrims = 0; mRezCount = 0; updateImportNumbers(); for (LLSD::array_const_iterator prim_arr_it = mLLSD["data"].beginArray(), prim_arr_end = mLLSD["data"].endArray(); prim_arr_it != prim_arr_end; ++prim_arr_it) { LLSD llsd2 = (*prim_arr_it)["group_body"]; for (LLSD::map_const_iterator prim_it = llsd2.beginMap(), prim_end = llsd2.endMap(); prim_it != prim_end; ++prim_it) { LLSD prim_llsd = llsd2[prim_it->first]; if (prim_llsd.has("sculpt")) { LLSculptParams sculpt; sculpt.fromLLSD(prim_llsd["sculpt"]); if ((sculpt.getSculptType() & LL_SCULPT_TYPE_MASK) != LL_SCULPT_TYPE_MESH) { LLUUID orig = sculpt.getSculptTexture(); if (mTexturesList.count(orig) == 0) { LL_INFOS() << "Found a new SCULPT texture to upload " << orig << LL_ENDL; mTexturesList.insert(orig); } } } if (prim_llsd.has("light_texture")) { LLLightImageParams lightimg; lightimg.fromLLSD(prim_llsd["light_texture"]); LLUUID t_id = lightimg.getLightTexture(); if (!is_default_texture(t_id) && mTexturesList.count(t_id) == 0) { LL_INFOS() << "Found a new light texture to upload: " << t_id << LL_ENDL; mTexturesList.insert(t_id); } } // Check both for "textures" and "texture" since the second (buggy) // case has already been seen in some exported prims XML files... LLSD& te_llsd = prim_llsd.has("textures") ? prim_llsd["textures"] : prim_llsd["texture"]; for (LLSD::array_iterator it = te_llsd.beginArray(); it != te_llsd.endArray(); ++it) { LLSD the_te = *it; LLTextureEntry te; te.fromLLSD(the_te); LLUUID t_id = te.getID(); if (!is_default_texture(t_id) && mTexturesList.count(t_id) == 0) { LL_INFOS() << "Found a new texture to upload: " << t_id << LL_ENDL; mTexturesList.insert(t_id); } } if (prim_llsd.has("materials")) { LLSD mat_llsd = prim_llsd["materials"]; for (LLSD::array_iterator it = mat_llsd.beginArray(); it != mat_llsd.endArray(); ++it) { LLSD the_mat = *it; LLMaterial mat; mat.fromLLSD(the_mat); LLUUID t_id = mat.getNormalID(); if (!is_default_texture(t_id) && mTexturesList.count(t_id) == 0) { LL_INFOS() << "Found a new normal map to upload: " << t_id << LL_ENDL; mTexturesList.insert(t_id); } t_id = mat.getSpecularID(); if (!is_default_texture(t_id) && mTexturesList.count(t_id) == 0) { LL_INFOS() << "Found a new specular map to upload: " << t_id << LL_ENDL; mTexturesList.insert(t_id); } } } } } if (mRetexture) { uploadNextAsset(); } else { importFirstObject(); } }
void LLObjectBackup::importObject(bool upload) { mTexturesList.clear(); mAssetMap.clear(); mCurrentAsset = LLUUID::null; mRetexture = upload; // Open the file open dialog LLFilePicker& file_picker = LLFilePicker::instance(); if (!file_picker.getOpenFile(LLFilePicker::FFLOAD_XML)) { // User canceled save. return; } std::string file_name = file_picker.getFirstFile().c_str(); mFolder = gDirUtilp->getDirName(file_name); llifstream import_file(file_name); LLSDSerialize::fromXML(mLLSD, import_file); import_file.close(); mAgentPos = gAgent.getPositionAgent(); mAgentRot = LLQuaternion(gAgent.getAtAxis(), gAgent.getLeftAxis(), gAgent.getUpAxis()); // Get the texture map LLSD::map_const_iterator prim_it; LLSD::array_const_iterator prim_arr_it; mCurObject = 1; mCurPrim = 1; mObjects = mLLSD["data"].size(); mPrims = 0; mRezCount = 0; if (mObjects <= 0) { LLSD args; args["MESSAGE"] = std::string("Object import failed.\nThe XML file has an incompatble format or does not contain any objects."); LLNotifications::instance().add("GenericAlert", args); llwarns << "Trying to import illegal XML object file." << llendl; return; } show(false); updateImportNumbers(); for (prim_arr_it = mLLSD["data"].beginArray(); prim_arr_it != mLLSD["data"].endArray(); prim_arr_it++) { LLSD llsd2 = (*prim_arr_it)["group_body"]; for (prim_it = llsd2.beginMap(); prim_it != llsd2.endMap(); prim_it++) { LLSD prim_llsd = llsd2[prim_it->first]; LLSD::array_iterator text_it; std::list<LLUUID>::iterator iter; if (prim_llsd.has("sculpt")) { LLSculptParams* sculpt = new LLSculptParams(); sculpt->fromLLSD(prim_llsd["sculpt"]); LLUUID orig = sculpt->getSculptTexture(); bool alreadyseen = false; for (iter = mTexturesList.begin(); iter != mTexturesList.end(); iter++) { if ((*iter) == orig) alreadyseen = true; } if (alreadyseen == false) { llinfos << "Found a new SCULPT texture to upload " << orig << llendl; mTexturesList.push_back(orig); } } LLSD te_llsd = prim_llsd["textures"]; for (text_it = te_llsd.beginArray(); text_it != te_llsd.endArray(); text_it++) { LLSD the_te = (*text_it); LLTextureEntry te; te.fromLLSD(the_te); te.getID(); bool alreadyseen = false; for (iter = mTexturesList.begin(); iter != mTexturesList.end(); iter++) { if ((*iter) == te.getID()) alreadyseen = true; } if (alreadyseen == false) { llinfos << "Found a new texture to upload "<< te.getID() << llendl; mTexturesList.push_back(te.getID()); } } } } if (mRetexture == TRUE) uploadNextAsset(); else importFirstObject(); }
static JSBool do_import(JSContext *context, JSObject *obj, Importer *priv, const char *name) { char *filename; char *native_filename; char *full_path; char *dirname = NULL; jsval search_path_val; JSObject *search_path; JSObject *module_obj = NULL; jsuint search_path_len; jsuint i; JSBool result; GPtrArray *directories; if (strcmp(name, MODULE_INIT_PROPERTY) == 0) { return JS_FALSE; } if (!gjs_object_require_property(context, obj, "importer", "searchPath", &search_path_val)) { return JS_FALSE; } if (!JSVAL_IS_OBJECT(search_path_val)) { gjs_throw(context, "searchPath property on importer is not an object"); return JS_FALSE; } search_path = JSVAL_TO_OBJECT(search_path_val); if (!JS_IsArrayObject(context, search_path)) { gjs_throw(context, "searchPath property on importer is not an array"); return JS_FALSE; } if (!JS_GetArrayLength(context, search_path, &search_path_len)) { gjs_throw(context, "searchPath array has no length"); return JS_FALSE; } result = JS_FALSE; filename = g_strdup_printf("%s.js", name); native_filename = g_strdup_printf("%s."G_MODULE_SUFFIX, name); full_path = NULL; directories = NULL; /* First try importing an internal module like byteArray */ if (gjs_is_registered_native_module(context, obj, name) && import_native_file(context, obj, name, NULL)) { gjs_debug(GJS_DEBUG_IMPORTER, "successfully imported module '%s'", name); result = JS_TRUE; goto out; } for (i = 0; i < search_path_len; ++i) { jsval elem; elem = JSVAL_VOID; if (!JS_GetElement(context, search_path, i, &elem)) { /* this means there was an exception, while elem == JSVAL_VOID * means no element found */ goto out; } if (JSVAL_IS_VOID(elem)) continue; if (!JSVAL_IS_STRING(elem)) { gjs_throw(context, "importer searchPath contains non-string"); goto out; } g_free(dirname); dirname = NULL; if (!gjs_string_to_utf8(context, elem, &dirname)) goto out; /* Error message already set */ /* Ignore empty path elements */ if (dirname[0] == '\0') continue; /* Try importing __init__.js and loading the symbol from it */ if (full_path) g_free(full_path); full_path = g_build_filename(dirname, MODULE_INIT_FILENAME, NULL); module_obj = load_module_init(context, obj, full_path); if (module_obj != NULL) { jsval obj_val; if (gjs_object_get_property(context, module_obj, name, &obj_val)) { if (!JSVAL_IS_VOID(obj_val) && JS_DefineProperty(context, obj, name, obj_val, NULL, NULL, GJS_MODULE_PROP_FLAGS & ~JSPROP_PERMANENT)) { result = JS_TRUE; goto out; } } } /* Second try importing a directory (a sub-importer) */ if (full_path) g_free(full_path); full_path = g_build_filename(dirname, name, NULL); if (g_file_test(full_path, G_FILE_TEST_IS_DIR)) { gjs_debug(GJS_DEBUG_IMPORTER, "Adding directory '%s' to child importer '%s'", full_path, name); if (directories == NULL) { directories = g_ptr_array_new(); } g_ptr_array_add(directories, full_path); /* don't free it twice - pass ownership to ptr array */ full_path = NULL; } /* If we just added to directories, we know we don't need to * check for a file. If we added to directories on an earlier * iteration, we want to ignore any files later in the * path. So, always skip the rest of the loop block if we have * directories. */ if (directories != NULL) { continue; } /* Third, if it's not a directory, try importing a file */ g_free(full_path); full_path = g_build_filename(dirname, filename, NULL); if (g_file_test(full_path, G_FILE_TEST_EXISTS)) { if (import_file(context, obj, name, full_path)) { gjs_debug(GJS_DEBUG_IMPORTER, "successfully imported module '%s'", name); result = JS_TRUE; } /* Don't keep searching path if we fail to load the file for * reasons other than it doesn't exist... i.e. broken files * block searching for nonbroken ones */ goto out; } /* Finally see if it's a native module */ g_free(full_path); full_path = g_build_filename(dirname, native_filename, NULL); if (g_file_test(full_path, G_FILE_TEST_EXISTS)) { if (import_native_file(context, obj, name, full_path)) { gjs_debug(GJS_DEBUG_IMPORTER, "successfully imported module '%s'", name); result = JS_TRUE; } /* Don't keep searching path if we fail to load the file for * reasons other than it doesn't exist... i.e. broken files * block searching for nonbroken ones */ goto out; } gjs_debug(GJS_DEBUG_IMPORTER, "JS import '%s' not found in %s", name, dirname); } if (directories != NULL) { /* NULL-terminate the char** */ g_ptr_array_add(directories, NULL); if (import_directory(context, obj, name, (const char**) directories->pdata)) { gjs_debug(GJS_DEBUG_IMPORTER, "successfully imported directory '%s'", name); result = JS_TRUE; } } out: if (directories != NULL) { char **str_array; /* NULL-terminate the char** * (maybe for a second time, but doesn't matter) */ g_ptr_array_add(directories, NULL); str_array = (char**) directories->pdata; g_ptr_array_free(directories, FALSE); g_strfreev(str_array); } g_free(full_path); g_free(filename); g_free(native_filename); g_free(dirname); if (!result && !JS_IsExceptionPending(context)) { /* If no exception occurred, the problem is just that we got to the * end of the path. Be sure an exception is set. */ gjs_throw(context, "No JS module '%s' found in search path", name); } return result; }
char* do_import(char* ch1, char* ch2, char* ch3, char* ch4) { import_file(load_file()); return NULL; }
void primbackup::import_object(bool upload) { textures.clear(); assetmap.clear(); current_asset=LLUUID::null; this->m_retexture=upload; // Open the file open dialog LLFilePicker& file_picker = LLFilePicker::instance(); if( !file_picker.getOpenFile( LLFilePicker::FFLOAD_XML ) ) { // User canceled save. return; } std::string file_name = file_picker.getFirstFile().c_str(); folder = gDirUtilp->getDirName(file_name); llifstream import_file(file_name); LLSDSerialize::fromXML(llsd, import_file); import_file.close(); show(); //Get the texture map LLSD::map_const_iterator prim_it; LLSD::array_const_iterator prim_arr_it; this->m_curobject=1; this->m_curprim=1; this->m_objects=llsd["data"].size(); this->m_prims=0; rezcount=0; updateimportnumbers(); for( prim_arr_it = llsd["data"].beginArray(); prim_arr_it != llsd["data"].endArray(); prim_arr_it++) { LLSD llsd2; llsd2=(*prim_arr_it)["group_body"]; for( prim_it = llsd2.beginMap(); prim_it != llsd2.endMap(); prim_it++) { LLSD prim_llsd; prim_llsd=llsd2[prim_it->first]; LLSD::array_iterator text_it; std::list<LLUUID>::iterator iter; if(prim_llsd.has("sculpt")) { LLSculptParams* sculpt=new LLSculptParams(); sculpt->fromLLSD(prim_llsd["sculpt"]); LLUUID orig=sculpt->getSculptTexture(); bool alreadyseen=false; for(iter = textures.begin(); iter != textures.end() ; iter++) { if( (*iter)==orig) alreadyseen=true; } if(alreadyseen==false) { llinfos << "Found a new SCULPT texture to upload "<<orig<<llendl; textures.push_back(orig); } } LLSD te_llsd; te_llsd=prim_llsd["textures"]; for(text_it=te_llsd.beginArray(); text_it !=te_llsd.endArray(); text_it++) { LLSD the_te; the_te=(*text_it); LLTextureEntry te; te.fromLLSD(the_te); te.getID(); bool alreadyseen=false; for(iter = textures.begin(); iter != textures.end() ; iter++) { if( (*iter)==te.getID()) alreadyseen=true; } if(alreadyseen==false) { llinfos << "Found a new texture to upload "<<te.getID()<<llendl; textures.push_back(te.getID()); } } } } if(m_retexture==TRUE) upload_next_asset(); else import_object1a(); }