diff --git a/util.h b/util.h
index c7d3a28..01327be 100644
--- a/util.h
+++ b/util.h
@@ -12,22 +12,23 @@
 		if(!argv0) \
 			argv0 = argv[0]; \
 		for(argc--, argv++; argv[0] && argv[0][0] == '-' && argv[0][1] != '\0'; argc--, argv++) { \
+			int _break=0;\
 			if(argv[0][1] == '-' && argv[0][2] == '\0') { /* -- signifies end of flags */ \
 				argc--; argv++; \
 				break; \
 			} \
-			for(argv[0]++; *argv[0] != '\0'; argv[0]++) \
-				switch(*argv[0])
+			for(argv[0]++; *argv[0] != '\0' && !_break;) \
+				switch(*argv[0]++)
 
 #define ARGEND \
 		} \
 	}
 
 #define ARGC()    (*argv[0])
-#define ARGF()    (*argv[0] ? argv[0] \
-                  : argv[1] ? (argc--, *++argv) : NULL)
-#define EARGF(x)  (*argv[0] ? argv[0] \
-                  : argv[1] ? (argc--, *++argv) : ((x), abort(), NULL))
+#define ARGF()    ((_break=1), *argv[0] ? argv[0] \
+                  : argv[1] ? (argc--, *++argv) : (char*)0)
+#define EARGF(x)  ((_break=1), *argv[0] ? argv[0] \
+                  : argv[1] ? (argc--, *++argv) : ((x), abort(), (char*)0))
 
 extern char *argv0;
 
