const char16_t *calchook_ndls_run(void *, void *, unsigned int argc, char16_t *argv[]) { if(argc == 0) return u"\"Missing Argument!\""; unsigned int i; char *argv_prgm[argc]; for(i = 0; i < argc; ++i) { size_t len = utf16_strlen(reinterpret_cast<uint16_t*>(argv[i])); argv_prgm[i] = new char[2*len + 1]; if(!argv_prgm[i]) { // Free already allocated argv_prgm for(unsigned int j = 0; j < i; ++j) delete[] argv_prgm[j]; return u"\"Out of memory!\""; } // Strip quotes from strings if((*argv[i] == '"' && *(argv[i]+len-1) == '"') || (*argv[i] == '\'' && *(argv[i]+len-1) == '\'')) { *(argv[i]+len-1) = 0; utf162ascii(argv_prgm[i], reinterpret_cast<uint16_t*>(argv[i] + 1), 2*len); } else utf162ascii(argv_prgm[i], reinterpret_cast<uint16_t*>(argv[i]), 2*len); } int ret = ld_exec_with_args(argv_prgm[0], argc - 1, argv_prgm + 1, nullptr); // Free argv_prgm for(unsigned int j = 0; j < i; ++j) delete[] argv_prgm[j]; // The return value is never freed, so use a static buffer static char16_t ret16[16]; static char retascii[16]; snprintf(retascii, 16, "%d", ret); ascii2utf16(ret16, retascii, 16); return ret16; }
int ld_exec(const char *path, void **resident_ptr) { return ld_exec_with_args(path, 0, NULL, resident_ptr); }
int sc_nl_exec(const char *prgm_path, int argsn, char *args[]) { return ld_exec_with_args(prgm_path, argsn, args, NULL); }