dinitctl: clean up a TODO.
authorDavin McCall <davmac@davmac.org>
Mon, 19 Jun 2017 09:02:39 +0000 (10:02 +0100)
committerDavin McCall <davmac@davmac.org>
Mon, 19 Jun 2017 09:02:39 +0000 (10:02 +0100)
src/dinitctl.cc

index e8c5daa38385fb35b8a361b03f2a2f3e9dbfd6e7..d431ac859de97ebab035d54f1d6dc9af206e9bc6 100644 (file)
@@ -454,16 +454,13 @@ static int startStopService(int socknum, const char *service_name, Command comma
 // a response. Returns 1 on failure (with error logged), 0 on success.
 static int issueLoadService(int socknum, const char *service_name)
 {
-    using namespace std;
-    
     // Build buffer;
     uint16_t sname_len = strlen(service_name);
     int bufsize = 3 + sname_len;
     int r;
     
-    {
-        // TODO: new: catch exception
-        unique_ptr<char[]> ubuf(new char[bufsize]);
+    try {
+        std::unique_ptr<char[]> ubuf(new char[bufsize]);
         auto buf = ubuf.get();
         
         buf[0] = DINIT_CP_LOADSERVICE;
@@ -472,6 +469,10 @@ static int issueLoadService(int socknum, const char *service_name)
         
         r = write_all(socknum, buf, bufsize);
     }
+    catch (std::bad_alloc &badalloc) {
+        std::cerr << "dinitctl: " << badalloc.what() << std::endl;
+        return 1;
+    }
     
     if (r == -1) {
         perror("dinitctl: write");