JOB* create_job(const char* command) { JOB* job = NULL; char* cleancmd, ***iter; if (command == NULL) return NULL; job = (JOB*) malloc(sizeof(JOB)); error(job == NULL, NULL); job->name = (char*) malloc(sizeof(char)*(strlen(command)+1)); error(job->name == NULL, (free(job), NULL)); strcpy(job->name, command); job->inputfd = get_io_redir_file(command, SLSH_INPUT); job->outputfd = get_io_redir_file(command, SLSH_OUTPUT); job->blocking = is_blocking(command); cleancmd = clean_command(command); error(cleancmd == NULL, (destroy_job(&job), NULL)); job->cmd = make_cmd_array(cleancmd); free(cleancmd); error(job->cmd == NULL, (destroy_job(&job), NULL)); job->ncmd = 0; iter = job->cmd; while (*iter != NULL) { job->ncmd++; iter++; } job->run_count = 0; job->pgid = 0; job->pid = (pid_t*) calloc(job->ncmd, sizeof(pid_t)); error(job->pid == NULL, (destroy_job(&job), NULL)); job->lastmodified = -1; return job; }
void StarDictClient::disconnect() { clean_command(); if (in_source_id_) { g_source_remove(in_source_id_); in_source_id_ = 0; } if (out_source_id_) { g_source_remove(out_source_id_); out_source_id_ = 0; } if (channel_) { g_io_channel_shutdown(channel_, TRUE, NULL); g_io_channel_unref(channel_); channel_ = NULL; } if (sd_ != -1) { Socket::close(sd_); sd_ = -1; } is_connected_ = false; }