]> git.armaanb.net Git - mmenu.git/blobdiff - mmenu.c
Add usage message and clean up exit codes
[mmenu.git] / mmenu.c
diff --git a/mmenu.c b/mmenu.c
index fafc3fd60f252cd2c6601273cc1c8e7184d37089..01a89637c6b3e9ae40bf6805eb268098101dd7b3 100644 (file)
--- a/mmenu.c
+++ b/mmenu.c
@@ -20,7 +20,7 @@ int
 memfail(void)
 {
        printf("ERROR: Out of memory\n");
-       exit(4);
+       exit(2);
 }
 
 static size_t
@@ -73,7 +73,7 @@ getmenu(char *date)
        if (res != CURLE_OK) {
                fprintf(stderr,"ERROR: Could not fetch webpage\n%s\n",
                                                curl_easy_strerror(res));
-               exit(2);
+               exit(1);
        }
 
        curl_easy_cleanup(curl);
@@ -101,6 +101,8 @@ getmenu(char *date)
                if (c == '>') intag = false;
        }
 
+       free(chunk.memory);
+
        // Strip empty newlines
        char *nl = (char *) calloc(1, sizeof(char));
        if (!nl) memfail();
@@ -108,15 +110,15 @@ getmenu(char *date)
        j = 1;
        for (int i = 0; outp[i]; i++) {
                j++;
-               if (outp[i] == '\n' && outp[i+1] == '\n') {
-                       i++;
-               } else {
+               if (!((outp[i] == '\n' && outp[i+1] == '\n') ||
+                               (outp[i] == ' ' && outp[i+1] == ' '))) {
                        nl = (char *) realloc(nl, j);
                        if (!nl) memfail();
-                       next[0] = outp[i];
+                       next[0] = outp[i+1];
                        strncat(nl, next, 2);
                }
        }
+
        free(outp);
        return nl;
 }
@@ -128,7 +130,10 @@ dayback(Widget unused, XtPointer client_data, XtPointer call_data)
        Widget disp = (Widget) client_data;
        XmListCallbackStruct *list_cbs = (XmListCallbackStruct *) call_data;
        char *nl = getmenu(days[list_cbs->item_position - 1]);
-       XmTextReplace((Widget) disp, 0, strlen(XmTextGetString(disp)), nl);
+       char *oldtext = XmTextGetString(disp) ;
+       XmTextReplace((Widget) disp, 0, strlen(oldtext), nl);
+       free(nl);
+       free(oldtext);
 }
 
 // Convert an array of string to an array of compound strings
@@ -148,6 +153,11 @@ XmStringTable ArgvToXmStringTable (int argc, char **argv)
 int
 main(int argc, char *argv[])
 {
+       if (argc > 1) {
+               printf("Usage: %s\n", argv[0]);
+               exit(3);
+       }
+
        // Initialize motif
        Widget         toplevel, rowcol, daysel, disp;
        XmStringTable  strs;
@@ -165,7 +175,8 @@ main(int argc, char *argv[])
 
        // Create text widget to display menu
        n = 0;
-       XtSetArg(args[n], XmNvalue, getmenu("")); n++;
+       char *nl = getmenu("");
+       XtSetArg(args[n], XmNvalue, nl); n++;
        XtSetArg(args[n], XmNeditable, False); n++;
        XtSetArg(args[n], XmNcolumns, 80); n++;
        XtSetArg(args[n], XmNrows, 20); n++;
@@ -173,6 +184,7 @@ main(int argc, char *argv[])
        XtSetArg(args[n], XmNcursorPositionVisible, False); n++;
        disp = XmCreateScrolledText(rowcol, "text", args, n);
        XtManageChild(disp);
+       free(nl);
 
        // Create day selector
        strs = ArgvToXmStringTable (XtNumber(days), days);