LINUX.ORG.RU

История изменений

Исправление LINUX-ORG-RU, (текущая версия) :

dron@gnu:~$ dir1=/tmp/000/1/1/1/1
dron@gnu:~$ dir2=/tmp/000/1/1/1/2
dron@gnu:~$ dir3=/tmp/000/2/1/1/1
dron@gnu:~$ gcc main.c
dron@gnu:~$ cmd=./a.out 
dron@gnu:~$ result=$($cmd "$dir1" "$dir2" "$dir3")
dron@gnu:~$ echo $result
/tmp/000/
dron@gnu:~$
#include <stdio.h>
#include <string.h>
#include <limits.h>

int main(int argc, char *argv[])
{
    if(argc < 2)
    {
        printf("Need minimum 2 argumets\n");
        return 1;
    }

    if(argc == 2)
    {
        printf("%s\n",argv[1]);
        return 2;
    }

    char basepath[PATH_MAX]="";
    const size_t  first_len  = strlen(argv[1]);
    for (size_t j = 0; j < first_len; j++ )
    {
        for (size_t i = 2; i < argc; i++  )
        {
            if(argv[1][j] == argv[i][j])
            {
                basepath[j]=argv[1][j];
            }else{
                char * pwd = strrchr(basepath,'/');
                *(pwd+1)='\0';
                printf("%s\n",basepath);
                return 0;
            }
        }
    }
    printf("%s\n",basepath);
    return 0;
}

Исправление LINUX-ORG-RU, :

dron@gnu:~$ dir1=/tmp/000/1/1/1/1
dron@gnu:~$ dir2=/tmp/000/1/1/1/2
dron@gnu:~$ dir3=/tmp/000/2/1/1/1
dron@gnu:~$ gcc main.c
dron@gnu:~$ cmd=./a.out 
dron@gnu:~$ result=$($cmd "$dir1" "$dir2" "$dir3")
dron@gnu:~$ echo $result
/tmp/000/
dron@gnu:~$
#include <stdio.h>
#include <string.h>
#include <limits.h>

int main(int argc, char *argv[])
{
    if(argc < 2)
    {
        printf("Need minimum 2 argumets\n");
        return 1;
    }

    if(argc == 2)
    {
        printf("%s\n",argv[1]);
        return 2;
    }

    char basepath[PATH_MAX]="";
    const size_t  first_len  = strlen(argv[1]);
    for (size_t j = 0; j < first_len; j++ )
    {
        for (size_t i = 2; i < argc; i++  )
        {
            if(argv[1][j] == argv[i][j])
            {
                basepath[j]=argv[1][j];
            }else{
                char * pwd = strrchr(basepath,'/');
                *(pwd+1)='\0';
                printf("%s\n",basepath);
                return 0;
            }
        }
    }
    return 0;
}

Исходная версия LINUX-ORG-RU, :

dron@gnu:~$ dir1=/tmp/000/1/1/1/1
dron@gnu:~$ dir2=/tmp/000/1/1/1/2
dron@gnu:~$ dir3=/tmp/000/2/1/1/1
dron@gnu:~$ gcc main.c
dron@gnu:~$ cmd=./a.out 
dron@gnu:~$ result=$($cmd "$dir1" "$dir2" "$dir3")
dron@gnu:~$ echo $result
/tmp/000/
dron@gnu:~$
#include <stdio.h>
#include <string.h>
#include <limits.h>

int main(int argc, char *argv[])
{
    if(argc < 2)
    {
        printf("Need minimum 2 argumets\n");
        return 1;
    }

    if(argc == 2)
    {
        printf("%s\n",argv[1]);
        return 2;
    }

    char basepath[PATH_MAX]="";
    const size_t  first_len  = strlen(argv[1]);
    for (size_t j = 0; j < first_len; j++ )
    {
        for (size_t i = 2; i < argc; i++  )
        {
            if(argv[1][j] == argv[i][j])
            {
                basepath[j]=argv[1][j];
            }else{
                basepath[j]='\0';
                printf("%s\n",basepath);
                return 0;
            }
        }
    }
    return 0;
}