static char *cs_answer = (char *)NULL;
-void cleanReadLine(CleanString prompt, int history, CleanString *result)
-{
- //Initialize
- unsigned long promptlen = CleanStringLength(prompt);
- char *cs_prompt = (char *)malloc(promptlen+1);
- if(cs_prompt == NULL){
+char *cleanStringToCString(CleanString s){
+ unsigned long len = CleanStringLength(s);
+ char *cs = (char *)malloc(len+1);
+ if(cs == NULL){
printf("malloc failed...\n");
exit(1);
}
- memcpy(cs_prompt, CleanStringCharacters(prompt), promptlen);
- cs_prompt[promptlen] = '\0';
+ memcpy(cs, CleanStringCharacters(s), len);
+ cs[len] = '\0';
+ return cs;
+}
+
+void cleanReadLine(CleanString prompt, int history, CleanString *result)
+{
+ char *cs_prompt = cleanStringToCString(prompt);
//Get the answer and add to history if not empty
if(cs_answer){
add_history(cs_answer);
}
- //Transfor answer into cstring
- CleanStringVariable(answer, strlen(cs_answer));
- *result = (CleanString) answer;
- memcpy(CleanStringCharacters(answer), cs_answer, strlen(cs_answer));
- CleanStringLength(answer) = strlen(cs_answer);
+ if(!cs_answer){ //In case of an EOF
+ CleanStringVariable(answer, 1);
+ *result = (CleanString) answer;
+ memcpy(CleanStringCharacters(answer), "", 1);
+ CleanStringLength(answer) = 1;
+ } else { //In case of a proper response
+ CleanStringVariable(answer, strlen(cs_answer));
+ *result = (CleanString) answer;
+ memcpy(CleanStringCharacters(answer), cs_answer, strlen(cs_answer));
+ CleanStringLength(answer) = strlen(cs_answer);
+ }
+}
+
+void cleanSetReadLineName(CleanString name){
+ rl_readline_name = cleanStringToCString(name);
+}
+
+void cleanUsingHistory(){
+ using_history();
+}
+
+void cleanAddHistory(CleanString entry){
+ char *cs_entry = cleanStringToCString(entry);
+ add_history(cs_entry);
+ free(cs_entry);
+}
+
+void cleanClearHistory(){
+ clear_history();
+}
+
+int cleanHistorySearch(CleanString s, int dir){
+ char *cs_s = cleanStringToCString(s);
+ int ret = history_search(cs_s, dir);
+ free(cs_s);
+ return ret;
+}
+
+int cleanHistorySearchPrefix(CleanString s, int dir){
+ char *cs_s = cleanStringToCString(s);
+ int ret = history_search_prefix(cs_s, dir);
+ free(cs_s);
+ return ret;
}
+
+int cleanHistorySearchPos(CleanString s, int dir, int pos){
+ char *cs_s = cleanStringToCString(s);
+ int ret = history_search_pos(cs_s, dir, pos);
+ free(cs_s);
+ return ret;
+}
+
+int cleanReadHistory(CleanString path)
+{
+ char *cs_path = cleanStringToCString(path);
+ int errno = read_history(cs_path);
+ free(cs_path);
+ return errno;
+}
+
+int cleanReadHistoryRange(CleanString path, int from, int to)
+{
+ char *cs_path = cleanStringToCString(path);
+ int errno = read_history_range(cs_path, from, to);
+ free(cs_path);
+ return errno;
+}
+
+int cleanWriteHistory(CleanString path)
+{
+ char *cs_path = cleanStringToCString(path);
+ int errno = write_history(cs_path);
+ free(cs_path);
+ return errno;
+}
+
+int cleanAppendHistory(int n, CleanString path)
+{
+ char *cs_path = cleanStringToCString(path);
+ int errno = append_history(n, cs_path);
+ free(cs_path);
+ return errno;
+}
+
+int cleanHistoryTruncateFile(CleanString path, int nlines)
+{
+ char *cs_path = cleanStringToCString(path);
+ int errno = history_truncate_file(cs_path, nlines);
+ free(cs_path);
+ return errno;
+}
+