we're moving back to create_label() to avoid potential unexistant nodes
This commit is contained in:
parent
7956e253be
commit
f8ddec11e8
65
src/wofi.c
65
src/wofi.c
@ -397,6 +397,38 @@ static GtkWidget* create_label(char* mode, char* text, char* search_text, char*
|
|||||||
|
|
||||||
setup_label(mode, WOFI_PROPERTY_BOX(box));
|
setup_label(mode, WOFI_PROPERTY_BOX(box));
|
||||||
|
|
||||||
|
char* nodetext = text;
|
||||||
|
if (pre_display_cmd != NULL) {
|
||||||
|
text = NULL;
|
||||||
|
FILE *fp_labeltext;
|
||||||
|
char *cmd_labeltext;
|
||||||
|
char line[128]; // you'd think this caps the line's length to 128, but it's just a buffer which due to the nature of fgets() splits on lines
|
||||||
|
size_t size = 0;
|
||||||
|
// first, prepare cmd_labeltext to be each entry's actual comamand to run, aka replacing 'cat %s' to be 'cat filename'
|
||||||
|
if ((asprintf(&cmd_labeltext, pre_display_cmd, nodetext)) == -1) {
|
||||||
|
fprintf(stderr, "error parsing pre_display_cmd to run\n");
|
||||||
|
exit(EXIT_FAILURE); }
|
||||||
|
// then, run the command
|
||||||
|
fp_labeltext = popen(cmd_labeltext, "r");
|
||||||
|
if (fp_labeltext == NULL) {
|
||||||
|
fprintf(stderr, "error executing '%s'\n", cmd_labeltext);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
} else if (fgets(line, sizeof(line), fp_labeltext)) {
|
||||||
|
// lastly, read the output of said command, and put it into the text variable to be used for the label widgets
|
||||||
|
// consider using 'printf %.10s as your --pre-display-cmd to limit a string to a determined width. 10 here is an example
|
||||||
|
size += strlen(line+1); // we need place for the \0 of strcpy
|
||||||
|
text = (char *) realloc(text, size);
|
||||||
|
strcpy(text, line);
|
||||||
|
while (fgets(line, sizeof(line), fp_labeltext)) {
|
||||||
|
size += strlen(line);
|
||||||
|
text = (char *) realloc(text, size);
|
||||||
|
strncat(text, line, size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pclose(fp_labeltext);
|
||||||
|
}
|
||||||
|
|
||||||
if(allow_images) {
|
if(allow_images) {
|
||||||
parse_images(WOFI_PROPERTY_BOX(box), text, true);
|
parse_images(WOFI_PROPERTY_BOX(box), text, true);
|
||||||
} else {
|
} else {
|
||||||
@ -537,39 +569,8 @@ static gboolean _insert_widget(gpointer data) {
|
|||||||
if(node == NULL) {
|
if(node == NULL) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
char* nodetext = NULL;
|
char* nodetext = *(node->text);
|
||||||
|
|
||||||
if (pre_display_cmd != NULL) {
|
|
||||||
FILE *fp_labeltext;
|
|
||||||
char *cmd_labeltext;
|
|
||||||
char line[128]; // you'd think this caps the line's length to 128, but it's just a buffer which due to the nature of fgets() splits on lines
|
|
||||||
size_t size = 0;
|
|
||||||
// first, prepare cmd_labeltext to be each entry's actual comamand to run, aka replacing 'cat %s' to be 'cat filename'
|
|
||||||
if ((asprintf(&cmd_labeltext, pre_display_cmd, node->text[0])) == -1) {
|
|
||||||
printf(stderr, "error parsing pre_display_cmd to run\n");
|
|
||||||
exit(EXIT_FAILURE); }
|
|
||||||
// then, run the command
|
|
||||||
fp_labeltext = popen(cmd_labeltext, "r");
|
|
||||||
if (fp_labeltext == NULL) {
|
|
||||||
printf(stderr, "error executing '%s'\n", cmd_labeltext);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
} else if (fgets(line, sizeof(line), fp_labeltext)) {
|
|
||||||
// lastly, read the output of said command, and put it into the text variable to be used for the label widgets
|
|
||||||
// consider using 'printf %.10s as your --pre-display-cmd to limit a string to a determined width. 10 here is an example
|
|
||||||
size += strlen(line+1); // we need place for the \0 of strcpy
|
|
||||||
nodetext = (char *) realloc(nodetext, size);
|
|
||||||
strcpy(nodetext, line);
|
|
||||||
while (fgets(line, sizeof(line), fp_labeltext)) {
|
|
||||||
size += strlen(line);
|
|
||||||
nodetext = (char *) realloc(nodetext, size);
|
|
||||||
strncat(nodetext, line, size);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pclose(fp_labeltext);
|
|
||||||
} else {
|
|
||||||
nodetext = *(node->text);
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget* parent;
|
GtkWidget* parent;
|
||||||
if(node->action_count > 1 && !no_actions) {
|
if(node->action_count > 1 && !no_actions) {
|
||||||
|
Loading…
Reference in New Issue
Block a user