char *format_token(const char *token_str) { int i; char *out, *p; if (opt_iphone) return xconcat("com.rsa.securid.iphone://ctf?ctfData=", token_str); else if (opt_android) return xconcat("http://127.0.0.1/securid/ctf?ctfData=", token_str); else if (!opt_blocks) return xstrdup(token_str); /* user requested blocks of 5 digits (--blocks) */ i = strlen(token_str); out = xzalloc(i + (i / 5) + 2); for (i = 0, p = out; token_str[i]; i++) { if (i % 5 == 0 && i) *(p++) = '-'; *(p++) = token_str[i]; } return out; }
void archive_enter_subdir(const char *subdir, struct_panel *panel) { char *path, *temp; TRACE("archive_enter_subdir '%s'\n", subdir); temp=panel->archive_cwd; panel->archive_cwd=xconcat(temp, subdir); free(temp); if ( panel == &top_panel ) write_config_string("top_panel.archive_cwd", panel->archive_cwd); else write_config_string("bottom_panel.archive_cwd", panel->archive_cwd); update(panel); /* Перерисовываем список */ move_selection("0", panel); /* Выбираем первый элемент */ path=xconcat_path_file(panel->archive_stack[panel->archive_depth], panel->archive_cwd); gtk_label_set_text (GTK_LABEL(panel->path_label), path); /* Пишем имя архива с путём в поле снизу */ free(path); }
void archive_go_upper(struct_panel *panel) /* Переходим на уровень выше внутри архива */ { if (panel->archive_cwd[0] == '\0') /* Если на верхнем уровне архива - то покидаем его*/ leave_archive(panel); else /* А если нет - */ { char *slash=NULL, *path, *iter; trim_line(panel->archive_cwd); /* Удяляем последний символ (слэш) из текущего имени */ archive_cwd_prev=xconcat(basename(panel->archive_cwd),"/"); slash=strrchr(panel->archive_cwd, '/'); /* Ищем последний слэш в пути */ if (slash==NULL) /* Если значение пути вырождается в NULL (слэша больше не оказалось) то делаем archive_cwd нулевой строкой*/ panel->archive_cwd[0]='\0'; else /* А иначе просто обрезаем путь в архиве на один уровень */ *(slash+1)='\0'; if (panel == &top_panel) { write_config_string("top_panel.archive_cwd", panel->archive_cwd); top_panel.last_name[0]='\0'; write_config_string("top_panel.last_name", top_panel.last_name); } else { write_config_string("bottom_panel.archive_cwd", panel->archive_cwd); bottom_panel.last_name[0]='\0'; write_config_string("bottom_panel.last_name", bottom_panel.last_name); } update(panel); /* Перерисовываем список */ iter=iter_from_filename (archive_cwd_prev, panel); move_selection(iter, panel); /* И выделяем предыдущий каталог в архиве */ free(iter); path=xconcat_path_file(panel->archive_stack[panel->archive_depth],panel->archive_cwd); gtk_label_set_text (GTK_LABEL(panel->path_label), path); /* Пишем имя архива с путём в поле снизу */ free(path); } }