Put pastable commands in error messages.
authorbruceperens <bruceperens@01035d8c-6547-0410-b346-abe4f91aad63>
Thu, 13 Mar 2014 21:29:38 +0000 (21:29 +0000)
committerbruceperens <bruceperens@01035d8c-6547-0410-b346-abe4f91aad63>
Thu, 13 Mar 2014 21:29:38 +0000 (21:29 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1438 01035d8c-6547-0410-b346-abe4f91aad63

freedv-server/source/big_main.cpp
freedv-server/source/drivers.h
freedv-server/source/platform/linux/scheduler.cpp

index 7ba58c57a07daa22ea4876147cbe43527a389927..a9e306f8f14c6ab1eab9322b56305baf27381eac 100644 (file)
@@ -88,9 +88,14 @@ static const struct option options[] = {
   { 0, 0, 0, 0 }
 };
 
+namespace FreeDV {
+  const char * program_name = 0;
+};
+
 int
 main(int argc, char * * argv)
 {
+  FreeDV::program_name = argv[0];
   Interfaces   i;
   const DriverManager * const m = driver_manager();
 
index 0ab42bb883c2010af8d5cff936ff9a3f901d0184..9b13440cd97caa4093e937c993af9d5d794aaf24 100644 (file)
@@ -5,6 +5,8 @@
 
 /// Namespace used for all code in this program.
 namespace FreeDV {
+  /// This propogates argv[0] so that it can be used in error messages.
+  extern const char *  program_name;
 
   /// The sample rate used by all audio interfaces in the program.
   /// the sound cards are in general driven at 48000 because that's
index cc07ba578bd49a79ae4fe5711804c948ae6114a8..2c33ed8542d49284fb24740fcff048abdde0617a 100644 (file)
@@ -1,34 +1,39 @@
+#include "drivers.h"
+#include <string>
+#include <cstring>
+#include <iostream>
 #include <unistd.h>
+#include <errno.h>
+
 #ifdef _POSIX_PRIORITY_SCHEDULING
 #include <sched.h>
 #endif
+
 #ifdef _POSIX_MEMLOCK_RANGE
 #include <sys/mman.h>
 #endif
-#include <errno.h>
-#include <cstring>
-#include <iostream>
-#include "drivers.h"
 
-static const char insufficient_privilege_message[] =
-"Warning: Insufficient privilege to set a real-time scheduling priority,\n"
-"or to lock memory.\n"
-"This could cause audio to be interrupted while other programs use the CPU.\n" 
-"To fix: As root, run\n"
-"\n"
-"\tsetcap cap_sys_nice+ep filename\n"
-"\tsetcap cap_ipc_lock+ep filename\n"
-"\n"
-"where filename is the executable file for this program.\n"
-"That will allow you to use a real-time scheduling priority and locked memory\n"
-"while running as any user.\n"
-"Alternatively, you can execute this program as root.\n";
 
-static const char old_kernel_message[] =
-"This kernel doesn't seem to have real-time facilities or memory locking.\n"
-"If audio is sometimes interrupted, try a newer kernel.\n";
 
 namespace FreeDV {
+  static const char privilege_message_a[] =
+  "Warning: Insufficient privilege to set a real-time scheduling priority,\n"
+  "or to lock memory.\n"
+  "This could cause audio to be interrupted while other programs use the CPU.\n" 
+  "To fix: As root, run\n"
+  "\n"
+  "\tsetcap cap_sys_nice+ep "; /* program_name */
+  static const char privilege_message_b[] = "\n\tsetcap cap_ipc_lock+ep ";
+  /* program_name */
+  static const char privilege_message_c[] = "\n\n"
+  "That will allow you to use a real-time scheduling priority and locked\n"
+  "memory while running as any user.\n"
+  "Alternatively, you can execute this program as root.\n\n";
+  
+  static const char old_kernel_message[] =
+  "This kernel doesn't seem to have real-time facilities or memory locking.\n"
+  "If audio is sometimes interrupted, try a newer kernel.\n";
+
   void
   set_scheduler()
   {
@@ -66,6 +71,10 @@ namespace FreeDV {
     if ( old_kernel )
       std::cerr << old_kernel_message;
     else if ( insufficient_privilege )
-      std::cerr << insufficient_privilege_message;
+      std::cerr << privilege_message_a;
+      std::cerr << program_name;
+      std::cerr << privilege_message_b;
+      std::cerr << program_name;
+      std::cerr << privilege_message_c;
   }
 }