github.com/hugh712/snapd@v0.0.0-20200910133618-1a99902bd583/cmd/snapd-env-generator/main.c (about)

     1  /*
     2   * Copyright (C) 2018 Canonical Ltd
     3   *
     4   * This program is free software: you can redistribute it and/or modify
     5   * it under the terms of the GNU General Public License version 3 as
     6   * published by the Free Software Foundation.
     7   *
     8   * This program is distributed in the hope that it will be useful,
     9   * but WITHOUT ANY WARRANTY; without even the implied warranty of
    10   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    11   * GNU General Public License for more details.
    12   *
    13   * You should have received a copy of the GNU General Public License
    14   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    15   *
    16   */
    17  
    18  #include<stdlib.h>
    19  #include<string.h>
    20  #include<stdio.h>
    21  #include<linux/limits.h>
    22  
    23  #include "libsnap-confine-private/string-utils.h"
    24  
    25  #include "config.h"
    26  
    27  // Systemd environment generators work since version 233 which ships
    28  // in Ubuntu 17.10+
    29  int main(int argc, char **argv)
    30  {
    31  	const char *snap_bin_dir = SNAP_MOUNT_DIR "/bin";
    32  
    33  	char *path = getenv("PATH");
    34  	if (path == NULL || sc_streq(path, "")) {
    35  		// do nothing, until systemd is fixed, see LP#1791691
    36  		return 0;
    37  	}
    38  	char buf[PATH_MAX + 1] = { 0 };
    39  	strncpy(buf, path, sizeof(buf) - 1);
    40  	char *s = buf;
    41  
    42  	char *tok = strsep(&s, ":");
    43  	while (tok != NULL) {
    44  		if (sc_streq(tok, snap_bin_dir))
    45  			return 0;
    46  		tok = strsep(&s, ":");
    47  	}
    48  
    49  	printf("PATH=%s:%s\n", path, snap_bin_dir);
    50  	return 0;
    51  }